新微赢技术网

标题: 大家来看运行结果为多少 [打印本页]

作者: 陪你疯→想你    时间: 2009-11-4 00:29
标题: 大家来看运行结果为多少
int fun(int n)
{
if(++n==5)
return n++;
return n*fun(n++);
}
void main()
{
int i=1;
int sum=fun(i);
cout<<sum<<endl;
}
作者: 成骏针织机械    时间: 2009-11-4 00:29
呵呵,真的不明白啊!
帮你顶一下先。
作者: 青松    时间: 2009-11-4 00:29
是什么哟?
连接出错????
作者: X~iao~ping    时间: 2009-11-4 00:29
300,
考虑函数的调用栈。
作者: 風過aiq無痕    时间: 2009-11-4 00:29
看不明白,不过感觉写的不对
作者: 老鼠爱上猫    时间: 2009-11-4 00:29
300
作者: 藍麥可兒    时间: 2009-11-4 00:29
以下是引用yvtianzll在2006-9-13 21:27:42的发言:
300,
考虑函数的调用栈。
考虑函数的调用栈
这是什么来的。。。
可不可以讲明白点n是怎么样变化的吗,
作者: 天山花芯    时间: 2009-11-4 00:29
函数的调用序列是这样的
sum = fun(1);
fun(1) = n*fun(2++) ;此时 n = 2
fun(2) = n*fun(3++) ;此时 n = 3
fun(3) = n*fun(4++) ; ;此时 n = 4
fun(4) = 5
好了,然后返回,但是再返回的时候栈里面的每个n都再调用f(n++)的时候加1了,所以
sum = 5*5*4*3 = 300

只能表述的这么清楚了,自己画调用栈有可能更清楚一点
作者: ☆独吻☆    时间: 2009-11-4 00:29
以下是引用yvtianzll在2006-9-14 9:22:14的发言:
函数的调用序列是这样的
sum = fun(1);
fun(1) = n*fun(2++) ;此时 n = 2
fun(2) = n*fun(3++) ;此时 n = 3
fun(3) = n*fun(4++) ; ;此时 n = 4
fun(4) = 5
好了,然后返回,但是再返回的时候栈里面的每个n都再调用f(n++)的时候加1了,所以
sum = 5*5*4*3 = 300

只能表述的这么清楚了,自己画调用栈有可能更清楚一点

确实很清楚了,我对 递归 很不明白。

我想问下: fun (1) =n* fun(2++ ) 我这样想,哪个时候n应该还是1啊。怎么2++呢?
还有哪个时候fun(n++) 这个fun = 多少?

我先申明,我没有经过 培训,也从来没上过C的任何课程。大家不要见笑了。 我对其他的还可以。就是递归 很不明白。
作者: 飘林飞遥    时间: 2009-11-4 00:29
这个是++n,n++的区别
因为前面有 if(++n==5),n已经加1了




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2