关于函数递归的一个问题
age(int n){int c;
if(n==1)c=10;
else c=age(n-1)+2;
return(c);
}
main()
{ printf("%d",age(5));
}
这个程序,当n==1后,c=10
接下来程序怎么走?
我觉的当n==1后,不会再走else这一语句了吧
实在没有想明白
----------------解决方案--------------------------------------------------------
else这句是不会执行了,但return这句还是要执行滴。
----------------解决方案--------------------------------------------------------
return完了之后呢
不还是进行不下去吗
----------------解决方案--------------------------------------------------------
呵呵,大家好!好久没来坛子拉.
这是一个数学递归结构,是递归结构中最简单的一种.其数学表达为:
Age(n) = [ 10 ,n=1
[ Age(n-1)+2, n>1
楼主的函数Age没有返回本身就是错误的,为了简洁可以改为:
int Age(int n) {
return n==1?10:Age(n-1)+2;
}
在理解和编写递归程序的时候最忌讳死抠其程序结构,而不理解起逻辑或者其数学意义.
要理解递归程序希望楼主在递归程序的非递归化问题上多下工夫,递归程序是很美的!
----------------解决方案--------------------------------------------------------
不难理解吧,通俗点,怕楼上的你看不明白,每次return回来的值是c,那么
age(5)=age(4)+2,则printf(...,(age(4) + 2));同理,age(4)=age(3)+2,printf(...,((age(3)+2)+2));
最后成age(1)时,printf(...,((age(1)+2)+2...)),这样应该通俗了吧...
----------------解决方案--------------------------------------------------------
明白了,谢谢4楼 5楼的两位耐心指点
感觉递归函数确实是个难点
----------------解决方案--------------------------------------------------------
这不是书上题吗.159页写的很明白啊
----------------解决方案--------------------------------------------------------