#include<stdio.h>
void fun (int);
int main (void)
{
int n;
while(scanf("%d",&n)!=EOF&&n)
{
fun(n);
}
return 0;
}
void fun (int n)
{
static int sum=0;
sum+=n%10;
if(!(n/10))
printf("%d",sum);
fun(n/10);
}
目的是计算输入数字各位的和
恩,我改成这样,
#include
int fun (int,int);
int main (void)
{
int n,i;
while(scanf("%d",&n)!=EOF&&n)
{
i=fun(n,0);
printf("%d",i);
}
return 0;
}
int fun (int n,int sum)
{
sum+=n%10;
if(!(n/10)){
printf("%d\n",sum);return sum;}
fun(n/10,sum);
}
怎么main 里面打印的i的值和fun里sum的不一样啊
因为return sum是最里层的fun返回的,它没有给任何变量保存,拆解一下:
int fun (int n,int sum) //假设这是倒数第二次递归调用
{
sum+=n%10;
if(!(n/10)){
printf("%d\n",sum);return sum;}
fun(n/10,sum); => int fun (int n,int sum) //这是最后一次递归调用,最后一次调用会返回sum但是fun没有给任何变量
{
sum+=n%10;
if(!(n/10)){
printf("%d\n",sum);return sum;} //最后一次在这里返回
fun(n/10,sum);
}
//这里是倒数第二次调用的返回,你没有返回任何数。
}
//这之后再继续返回,和倒数第二次的返回一样,直到返回到首次调用i=fun(n,0);
fun没有返回任何数。
如果你不想改函数内容,可以这样做:
#include
int fun (int,int);
int main (void)
{
int n,i;
while(scanf("%d",&n)!=EOF&&n)
{
i=0;
fun(n,i);
printf("%d",i);
}
return 0;
}
int fun (int n,int& sum)//这里的意思是把i的地址往这里传,函数里对sum的修改就是对i的修改,所以不用返回任何值,计算的sum已经给了i
{
sum+=n%10;
if(!(n/10)){
printf("%d\n",sum);return sum;}
fun(n/10,sum);
}
不用管return了