c语言函数的递归调用

int age(int n)
{int c:
if(n==1)
c=10:
lese
c=age(n-1)+2;
return(c);
} 我明白它的大体意思就是想知道一个数的值,要知道上一个数的值,可是谁能告诉我它返回值到底返回到哪 到底哪才是调用它的地方 前面根本么有

这段程序的意思是对传来的参数n,如果n<1,程序会崩溃;如果n>1则没大1,返回就多2,最后必然会执行c=10。比如n=5,则返回的是18((5-1)x2+10=18)

比如说做了5次递归,即n=5;执行的操作如下:

第1次调用(n=5) ,定义了一个intc;

       第2次调用(n=4) ,定义了一个intc;

            第3次调用(n=3) ,定义了一个intc;

                 第4次调用(n=2) ,定义了一个intc;

                       低5次调用(n=1) ,定义了一个intc;

                       n=1时,满足了条件n==1,故此时c=10;

                       第5次返回,此时第5次定义的c=age(int n)=10;前4次定义的int c没有值,下同

                第4次返回 ,此时第4次定义的c=age(int n)+2=10+2=12

            第3次返回,此时第3次定义的c=age(int n)+2=12+2=14

     第2次返回,此时第2次定义的c=age(int n)+2=14+2=16

第一次返回,此时第一次定义的c=age(int n)+2=16+2=18。此时按下面的程序b接收了返回值

我觉得你应该注意的是age(int n)本身就代表一个int值,就算没有参数接收也可以参与到运算当中,就像这个例子一样。

程序:

#include<stdio.h>

int age(int n)

{int c;

 if(n==1)

  c=10;

 else

c=age(n-1)+2;

 return c;

}            

void main()

{

int a=0,b=0;

scanf("%d",&a);

b=age(a);

printf("result is %d\n",b);

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-21
这个是用户自定义的函数,等待别的函数调用啊,你哪儿不明白?追问

就是他的返回值 到底返回在哪 这个是求N!的程序#include
int main()
{long fac(long n);
long n;
long y;
scanf("%d",&n);
y=fac(n);
printf("%d!=%d/n",n,y);
return 0;
}
long fac(long n)
{long f;
if(n<0)
printf("n<0,data error!");
else if(n==0||n==1)
f=1;
else f=fac(n-1)*n;
return (f);
}F返回到哪啊
}

追答

#include
int main()
{long fac(long n);
long n;
long y;
scanf("%d",&n);
y=fac(n);
printf("%d!=%d/n",n,y);
return 0;
}
long fac(long n) /*这里不是定义了函数fac是一个长整型的吗,那你在函数的末尾一定要返回一个值给这个函数啊,不然定义为long型的却没返回值,那就错了,你看上面的main函数也是定义为了int型,末尾就要加个return (0) 意思就是main函数最后返回值是0,当然也可以把main函数定义为void型,这时候把main函数最后的return (0)去掉就OK了,效果是一样的*/
{long f;
if(n<0)
printf("n<0,data error!");
else if(n==0||n==1)
f=1;
else f=fac(n-1)*n;
return (f);

第2个回答  2011-09-21
没太明白。这个要看在什么地方初次调用这个函数啊。比如
int main()
{
int i=age(3);
...追问

比如说求N!#include
int main()
{long fac(long n);
long n;
long y;
scanf("%d",&n);
y=fac(n);
printf("%d!=%d/n",n,y);
return 0;
}
long fac(long n)
{long f;
if(n<0)
printf("n<0,data error!");
else if(n==0||n==1)
f=1;
else f=fac(n-1)*n;
return (f);
} 这个程序F返回到哪啊

追答

函数返回到调用函数的语境
如果你写一个单独的
fac(x); //返回值被丢弃不使用
如果写在表达式里,就用返回值替代之
例如n=3
main -> 执行到
y=fac(3); 遇到函数调用,进入函数fac
-- f=fac(2)*3 // fac(3)里的f,遇到fac(2)再次进入函数fac
---- f=fac(1)*2 // fac(2)里的f,遇到fac(1)再次进入函数fac
------ f=1 // fac(1)里的f
------ return(f); // return(1), 1被返回上层语境代替fac(1)
---- f=1*2=2 // fac(2)里的f
---- return(f); // return(2), 2被返回上层语境代替fac(2)
-- f=2*3=6 // fac(3)里的f
-- return(f); // return(6), 3被返回上层语境(main函数)代替fac(3)
y=6 // 6代替fac(3)赋予变量y

追问

意思是说 当执行到fac(1)时 return(f)把它带到上一次调用它的位置 也就是F=fac(1)*2
用1替换fac(1)当执行到fac(3)时f=2*2执行完后return(f)再把f返回到y=fac(n)是这个意思吗

本回答被提问者采纳
相似回答