关于C语言中的几个问题。。

#include <stdio.h>
long fun(int n)
{
if (n>1)
return (n*fun(n-1));
return 1;
}
main()
{
printf("10!=%ld\n", fun(10))

问一:执行return 1;之后呢?我单步执行后发现return 1;之后竟然跑到 它的 后面的那个}中去了,之后又跑到return(n*fun(n-1));中去。为什么会这样?return 1起何用?
问二:“此时”才有fun returned的值出现。为什么会这样呢?运行后发现fun returned 的最终的值 就是 printf最终输出的值。
问三:递归调用是不是有“入栈”“出栈”的过程出现?而这“入栈”是否“不需要”人工特意写程序来完成,是有编译器“自动”完成?

只要是函数的递归调用都会自动“入栈”。。o(︶︿︶)o 唉。这个“递归”的真是有些难啊。。大家是否能推荐我看哪些文章或书籍,有专门详细讲解“递归”的?我看了谭浩强的《C程序设计》那章了,还是不大明白啊。“入栈”是朦朦胧胧知道一些,就是“什么时候出栈”不懂。

例如
int age(int n)
{
int c;
if ( n==1)
c=10;
else
c=age( n-1)+2;
return(c);

}
#include<stdio.h>
void main()
{
printf("%d\n",age(2));
}
为什么只有当n=2时候
才有“最终”的age returned的值呢?
才“出栈”呢?

而上次那题,为什么只有在return 1;时候再有fun returned 的值出现呢?
亟待着大家的解答。谢谢。

而且return(c);执行到其下面的}后,就跑到c=age( n-1)+2;中去的且一直在这3步之间跑来跑去,直到n=2的时候才到printf那步去。
为什么在n=1后会一直在c=age( n-1)+2;与return(c) ;和}之间跑来跑去呢?

第1个回答  2011-09-05
1.最好写() 括号里面是要输入的东西
没()不完整
2.可以转化的 但是整型没有这么大的数
也就是说在运算的过程中已经记录了错误的结果
再转化过来也不是这个数了

应该是对的吧 最后这个我不是很拿得准
第2个回答  2011-09-05
问题1 return 1的作用是结束递归,不再继续递归下去。
问题2 因为只有n<1的时候才不满足if条件,执行return语句。然后一级一级返回。本回答被提问者采纳
第3个回答  2011-09-05
简单的问题,多测试就好了
相似回答