瑞星卡卡安全论坛

首页 » 综合娱乐区 » Rising茶馆 » 一个C语言的直接递归的程序
golffalcon - 2010-5-28 10:15:00
#include <stdio.h>
long fib(int n)
{if (n>2) return (fib(n-1)+fib(n-2));
else return (2);
}
main()
{
printf("%ld\n",fib(6));
}
答案是16,不过,我想问下,这个16是怎么做出来的?步骤能否详细的说明下?我实在想不出来。
(划红字的是主要的想不通的地方)。

用户系统信息:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
鬼鬼小猫咪 - 2010-5-28 10:20:00
电脑盲路过,帮顶了.
茶馆小二 - 2010-5-28 10:37:00
n    flb(n-1) + flb(n-2)      return
6    flb(5) + flb(4)              ?
5  flb (4) + flb (3)                ?
4    flb(3) + flb(2)                flb(3) + 2 #因为flb(2) = 2
3    flb(2) + flb (1)                2 + 2    # 所以依次计算

flb(3) = 4, flb(4) = flb (3) + flb (2) =  6, flb(5) = flb (4) + flb (3) = 6 + 4 = 10, flb( 6  ) = flb (5) + flb (4) = 10 + 6 = 16

?表示在当前那个步骤无法确定呢,因为结果依赖于下一个层次的计算,所以继续列表,但是由于程序里说了只要n不大于2了,都返回2,所以flb(2) flb (1)都能确定了就
鬼鬼小猫咪 - 2010-5-28 10:38:00
小二电脑帝啊:kaka8:
茶馆小二 - 2010-5-28 10:43:00
抄的~
鬼鬼小猫咪 - 2010-5-28 10:45:00
电脑帝帮忙看看我那个贴...

http://bbs.ikaka.com/showtopic-8720372.aspx

谢谢
帅乖 - 2010-5-28 10:51:00
不懂也
茶馆小二 - 2010-5-28 10:54:00
有看没有懂~
鬼鬼小猫咪 - 2010-5-28 10:57:00
额,谢谢...我再研究研究.....
golffalcon - 2010-5-28 12:49:00
谢谢了,版主,原来是我的计算错了。:kaka6:
茶馆小二 - 2010-5-28 14:28:00
不客气~~
1
查看完整版本: 一个C语言的直接递归的程序