看一下下边那个程序 return (f(n-1) f(n-2)); 这句是怎么执行的 怎么调用的

[复制链接]
查看11 | 回复3 | 2011-9-11 04:31:13 | 显示全部楼层 |阅读模式
#includestdio.hintf(intn){if(n==1)return1;elsereturn(f(n-1)f(n-2));}voidmain(){printf(\"%d\",f(10));}
回复

使用道具 举报

千问 | 2011-9-11 04:31:13 | 显示全部楼层
这个是用递归求解Fibonacci数列。递推公式是f(n)=f(n-1)f(n-2),f(0)=f(1)=1.你的问题是应该再加入一个判断条件if(n==0)return1;否则会出现死循环的。另外,执行的时候就是递归调用,一般算法书上都有的。你画一下调用图就知道了。其实,由于某些值会重复计算,所以递归可以配合上记忆。或者用递推也可以。追问fn-1和fn-2这两个函数执行的顺序是什么啊还有上边谢了n==1怎么会出现死循环呢麻烦讲一下
回复

使用道具 举报

千问 | 2011-9-11 04:31:13 | 显示全部楼层
你手工先画一下f(3)的调用。因为终止条件你只提供了一个,f(2)=f(1)f(0),这个f(0)由于没有用终止条件,会继续往下调用,f(0)=f(-1)f(-2),然后继续调用,然后栈空间会被用光,程序会报告一个异常。f(n-1)和f(n-2)这两个随便哪个执行都无所谓,编译器来决定的。一般是先算f(n-1),再算f(n-2)的。至于调用产生的图,由于任何一本讲数据结构递归的都会有,而且都是用这个做例子,所以建议看书。
回复

使用道具 举报

千问 | 2011-9-11 04:31:13 | 显示全部楼层
ggg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行