搜索
bottom↓
回复: 21

发个今天去笔试的一个C语言附加题 (我答错了)

[复制链接]

出0入0汤圆

发表于 2012-9-20 19:26:01 | 显示全部楼层 |阅读模式
本帖最后由 tangguanglun 于 2012-9-20 20:05 编辑
  1. #include <stdio.h>

  2. int fun(int n, int*fp)
  3. {
  4.         int t, f;
  5.        
  6.         if(n<=1)
  7.         {
  8.                 *fp = 1;
  9.                 return 1;
  10.         }
  11.         t = fun(n-1, fp);
  12.         f = t + *fp;
  13.         *fp = t;
  14.         return f;
  15. }

  16. int main()
  17. {
  18.         int x = 15;

  19.         printf("%d",fun(4,&x));
  20.         return 0;
  21. }
复制代码
这个题有点意思,x无论怎么变输出都是一个结果。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-9-20 19:35:12 | 显示全部楼层
没明白。。K好像除了初始化就没干什么了。。。输出是不是0???

出0入0汤圆

发表于 2012-9-20 19:47:16 | 显示全部楼层
嗯,感觉题目出错了,我觉得本意是fun最终的return值是多少,现在么就是0老

出0入0汤圆

 楼主| 发表于 2012-9-20 19:55:44 | 显示全部楼层
prozmx 发表于 2012-9-20 19:47
嗯,感觉题目出错了,我觉得本意是fun最终的return值是多少,现在么就是0老

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

出0入0汤圆

 楼主| 发表于 2012-9-20 19:56:15 | 显示全部楼层
weihei 发表于 2012-9-20 19:35
没明白。。K好像除了初始化就没干什么了。。。输出是不是0???

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

出0入0汤圆

发表于 2012-9-20 19:57:02 | 显示全部楼层
输出 结果 是 5

出0入0汤圆

 楼主| 发表于 2012-9-20 20:02:38 | 显示全部楼层
答案自己去VC验证哈。

出0入0汤圆

发表于 2012-9-20 20:11:01 | 显示全部楼层
本帖最后由 x9fish 于 2012-9-20 20:13 编辑

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

出0入0汤圆

发表于 2012-9-20 20:35:21 | 显示全部楼层
考循环的么 ………………循环5次。。。。

出0入0汤圆

发表于 2012-9-21 09:08:52 | 显示全部楼层
int fun(int n, int*fp) 这个函数是可重入的! 为啥不设置为可重入?

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

出0入0汤圆

发表于 2012-9-21 09:38:52 | 显示全部楼层
程序算过来是不是8,没有经过VC验证

出0入0汤圆

发表于 2012-9-21 09:45:08 | 显示全部楼层
关键是执行到最深一层*fp被赋值为1了,

出0入0汤圆

发表于 2012-9-21 10:04:59 | 显示全部楼层
不知道考什么的。
我算出来是5,未经程序验证。

出0入0汤圆

发表于 2012-9-21 10:21:00 | 显示全部楼层
本帖最后由 pengshipower 于 2012-9-21 10:22 编辑

答案是5,vc验证。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-9-21 10:45:52 | 显示全部楼层
计算步骤:
  1. 3        t = fun(3,15)
  2. 2                 fun(3,15) = fun(2,15)
  3. 1                 fun(2,15) = fun(1,15)
  4.                   1 == fun(1,15)
  5. t = 1;
  6. f = t + *fp =  1 + 1;
  7. *fp = 1;
  8. t = 2;
  9. f = t + *fp = 2 + 1;
  10. *fp = 2;
  11. t = 3;
  12. f = t + *fp = 3 + 2;
  13. f = 5;

复制代码

出0入0汤圆

发表于 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

出0入0汤圆

发表于 2012-9-21 12:39:03 | 显示全部楼层
什么题目

出0入13汤圆

发表于 2012-9-21 12:44:36 | 显示全部楼层
我觉得这个函数就不对,和编译的环境有很大的关系。注意局部变量是int类型~!

出0入0汤圆

发表于 2012-9-21 12:52:12 | 显示全部楼层
递归               

出0入0汤圆

发表于 2012-10-8 17:49:47 | 显示全部楼层
哎  如果是我去面试 也答错了

出0入0汤圆

发表于 2012-10-8 17:52:53 | 显示全部楼层
我怎么理解成了 返回1?

出0入0汤圆

发表于 2012-10-8 18:21:49 | 显示全部楼层
果然有点意思,差点就算错了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 08:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表