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

#include<stdio.h>longfun(intn){if(n>1)return(n*fun(n-1));return1;}main(){printf("10!=... #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) ;和}之间跑来跑去呢?
展开
 我来答
闫和歌
2011-09-05 · TA获得超过350个赞
知道答主
回答量:261
采纳率:0%
帮助的人:186万
展开全部
1.最好写() 括号里面是要输入的东西
没()不完整
2.可以转化的 但是整型没有这么大的数
也就是说在运算的过程中已经记录了错误的结果
再转化过来也不是这个数了

应该是对的吧 最后这个我不是很拿得准
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
meng_wm
2011-09-05
知道答主
回答量:7
采纳率:0%
帮助的人:3.9万
展开全部
问题1 return 1的作用是结束递归,不再继续递归下去。
问题2 因为只有n<1的时候才不满足if条件,执行return语句。然后一级一级返回。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友52aeb54
2011-09-05 · TA获得超过2995个赞
知道小有建树答主
回答量:1261
采纳率:0%
帮助的人:1162万
展开全部
简单的问题,多测试就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式