发个今天去笔试的一个C语言附加题 (我答错了)
本帖最后由 tangguanglun 于 2012-9-20 20:05 编辑#include <stdio.h>
int fun(int n, int*fp)
{
int t, f;
if(n<=1)
{
*fp = 1;
return 1;
}
t = fun(n-1, fp);
f = t + *fp;
*fp = t;
return f;
}
int main()
{
int x = 15;
printf("%d",fun(4,&x));
return 0;
}这个题有点意思,x无论怎么变输出都是一个结果。 没明白。。K好像除了初始化就没干什么了。。。输出是不是0??? 嗯,感觉题目出错了,我觉得本意是fun最终的return值是多少,现在么就是0老 prozmx 发表于 2012-9-20 19:47 static/image/common/back.gif
嗯,感觉题目出错了,我觉得本意是fun最终的return值是多少,现在么就是0老
嗯,是我写错了,已经改过来了 weihei 发表于 2012-9-20 19:35 static/image/common/back.gif
没明白。。K好像除了初始化就没干什么了。。。输出是不是0???
对不起,刚才是我写错了,已经改过 输出 结果 是 5 答案自己去VC验证哈。 本帖最后由 x9fish 于 2012-9-20 20:13 编辑
递归函数啊
结果是.....晕,比如直接程序验算 考循环的么 ………………循环5次。。。。 int fun(int n, int*fp) 这个函数是可重入的! 为啥不设置为可重入?
否则这样调用,对于不同的编译器,可能产生不同的结果。 程序算过来是不是8,没有经过VC验证 关键是执行到最深一层*fp被赋值为1了, 不知道考什么的。
我算出来是5,未经程序验证。 本帖最后由 pengshipower 于 2012-9-21 10:22 编辑
答案是5,vc验证。
计算步骤:3 t = fun(3,15)
2 fun(3,15) = fun(2,15)
1 fun(2,15) = fun(1,15)
1 == fun(1,15)
t = 1;
f = t + *fp =1 + 1;
*fp = 1;
t = 2;
f = t + *fp = 2 + 1;
*fp = 2;
t = 3;
f = t + *fp = 3 + 2;
f = 5;
t = fun(n-1, fp); //t(n)=f(n-1)
f = t + *fp; //f(n)=f(n-1)+*fp
*fp = t; //表示上一次的*fp=t(n-1)=f(n-2)
f(n)=f(n-1)+f(n-2)
f(0)=1
f(1)=1 什么题目 我觉得这个函数就不对,和编译的环境有很大的关系。注意局部变量是int类型~! 递归 哎如果是我去面试 也答错了 我怎么理解成了 返回1? 果然有点意思,差点就算错了
页:
[1]