tangguanglun 发表于 2012-9-20 19:26:01

发个今天去笔试的一个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无论怎么变输出都是一个结果。

weihei 发表于 2012-9-20 19:35:12

没明白。。K好像除了初始化就没干什么了。。。输出是不是0???

prozmx 发表于 2012-9-20 19:47:16

嗯,感觉题目出错了,我觉得本意是fun最终的return值是多少,现在么就是0老

tangguanglun 发表于 2012-9-20 19:55:44

prozmx 发表于 2012-9-20 19:47 static/image/common/back.gif
嗯,感觉题目出错了,我觉得本意是fun最终的return值是多少,现在么就是0老

嗯,是我写错了,已经改过来了

tangguanglun 发表于 2012-9-20 19:56:15

weihei 发表于 2012-9-20 19:35 static/image/common/back.gif
没明白。。K好像除了初始化就没干什么了。。。输出是不是0???

对不起,刚才是我写错了,已经改过

stely 发表于 2012-9-20 19:57:02

输出 结果 是 5

tangguanglun 发表于 2012-9-20 20:02:38

答案自己去VC验证哈。

x9fish 发表于 2012-9-20 20:11:01

本帖最后由 x9fish 于 2012-9-20 20:13 编辑

递归函数啊
结果是.....晕,比如直接程序验算

xuboluan 发表于 2012-9-20 20:35:21

考循环的么 ………………循环5次。。。。

chinabn 发表于 2012-9-21 09:08:52

int fun(int n, int*fp) 这个函数是可重入的! 为啥不设置为可重入?

否则这样调用,对于不同的编译器,可能产生不同的结果。

dadongleilei 发表于 2012-9-21 09:38:52

程序算过来是不是8,没有经过VC验证

chenhuahui 发表于 2012-9-21 09:45:08

关键是执行到最深一层*fp被赋值为1了,

百果 发表于 2012-9-21 10:04:59

不知道考什么的。
我算出来是5,未经程序验证。

pengshipower 发表于 2012-9-21 10:21:00

本帖最后由 pengshipower 于 2012-9-21 10:22 编辑

答案是5,vc验证。

xf331785508 发表于 2012-9-21 10:45:52

计算步骤: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;

first_blood 发表于 2012-9-21 12:18:51

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

himyoma 发表于 2012-9-21 12:39:03

什么题目

liao-ljj 发表于 2012-9-21 12:44:36

我觉得这个函数就不对,和编译的环境有很大的关系。注意局部变量是int类型~!

Rocky_Zou 发表于 2012-9-21 12:52:12

递归               

cumtgao 发表于 2012-10-8 17:49:47

哎如果是我去面试 也答错了

cumtgao 发表于 2012-10-8 17:52:53

我怎么理解成了 返回1?

taotaoliu 发表于 2012-10-8 18:21:49

果然有点意思,差点就算错了
页: [1]
查看完整版本: 发个今天去笔试的一个C语言附加题 (我答错了)