大家来帮忙看看这个递规函数啊

cs_sniper_0 2004-10-27 09:40:00
n=6
fun(n)
{
if(n>2)
return(fun(n-1)+fun(n-2));
else
return(2);
}
它是怎么运行得啊我实在搞不清楚
如果n*fun(n-1)这种简单得还可以
...全文
133 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
road1981 2004-10-28
  • 打赏
  • 举报
回复
突然发现楼主的帖子不是斐波那契数列,应该是2 x f[n]:
2,2,4,6,10,16....
1,1,2,3,5,8....

斐波那契数列真是奥妙无穷
road1981 2004-10-28
  • 打赏
  • 举报
回复
斐波那契数列
顺便说一下他的原型,因为我觉得这个意大利数学家非常变态.

一对公兔子和母兔子,一个月以后产下另一对公/母兔子,然后这对兄妹居然做出了大逆不道的事情,在两个月以后又生下另一对公母兔子...罪孽的血液还在继续...
问一年以后一共有多少只兔子....
sutra 2004-10-28
  • 打赏
  • 举报
回复
斐波那契数的前两位应该是1,不是2啊。
int Fib( int N )
{
if( N <= 1 )
return 1;
else
return( Fib( N-1) + Fib( N-2 ) ;
}
从算法上分析,它是指数级的。对于N>4所用时间Fib(N) >= 1.5的N次方。另外过深的递归深度将占用过多的用于函数调用的空间。
另一个复杂度为O(N)的算法是:
int Fibonacci(int N)
{
int i, Last, NextToLast, Answer ;
if( N <= 1 )
return 1 ;
Last = NextToLast = 1 ;
for( i = 2; i <= N ; ++i ) {
Answer = Last + NextToLast ;
NextToLast = Last ;
Last = Answer ;
}
return Answer ;
}
jitian81411 2004-10-28
  • 打赏
  • 举报
回复
借用 jp1984(吕青萍C) 的图加点补充:
fib(n)
|-------------------|
fib(n - 1) fib(n - 2)
|-----------|
fib(n - 2) fib(n - 3) ......
| |
.... ......
f(3)+f(2)
|
f(2)+f(1)
其中f(2)=f(1)=2,f(3)=f(2)+f(1)=2+2=4,f(4)=f(3)+f(2)=4+2=6......
就这样算下去
cs_sniper_0 2004-10-28
  • 打赏
  • 举报
回复
2-2不是0了
cs_sniper_0 2004-10-28
  • 打赏
  • 举报
回复
不太清楚哎~意思是做嵌套递归??先将f(n-1)做到=2然后在f(n-1)的基础上再做f(n-2)??可是这时候f(n-1)已经是2了啊
renweitc 2004-10-28
  • 打赏
  • 举报
回复
编译器把f(n)先放入栈中,做f(n-1),若n-1>2,将f(n-1)放入栈中,做f(n-1)内的f(n-2)
依次类推直至n=2,然后依次出栈,得到f(n)内的f(n-1)值,继续做f(n-2)
cs_sniper_0 2004-10-28
  • 打赏
  • 举报
回复
顺便谢谢大家
cs_sniper_0 2004-10-28
  • 打赏
  • 举报
回复
你们都很懂埃~~~可我连数据结构和算法都没有学过~~~不理解5555555555~~~
借用 jp1984(吕青萍C) 的图加点补充:
fib(n)
|-------------------|
fib(n - 1) fib(n - 2)
|-----------|
fib(n - 2) fib(n - 3) ......
| |
.... ......
f(3)+f(2)
|
f(2)+f(1)
其中f(2)=f(1)=2,f(3)=f(2)+f(1)=2+2=4,f(4)=f(3)+f(2)=4+2=6......
就这样算下去
看起来怎么像是第三项是前两项得和??
还有我数据结构和算法还没有学过大家推荐一本吧~今天在思考乐看到一本外国得数据结构和算法~还有么~请大家推荐一本能提高c语言能力得书我在学2级c就查链表结构没看了
cs_sniper_0 2004-10-28
  • 打赏
  • 举报
回复
不懂埃~~~难道是数据结构吗??我还没开始学数据结构呢~~~他属于数据结构得哪一种压!我实在我不明白程序先做f(n-1)得递规在做f(n-2)得递规~但是编译器是怎么才知道f(n-1)运行结束后就直接取运行f(n-2)得
jp1984 2004-10-27
  • 打赏
  • 举报
回复
你画一颗倒的树再去遍历它你就明白了
fib(n)
|-------------------|
fib(n - 1) fib(n - 2)
|-----------|
fib(n - 2) fib(n - 3) ......
DuoFG 2004-10-27
  • 打赏
  • 举报
回复
基本上就是计算斐波那契数列
cs_sniper_0 2004-10-27
  • 打赏
  • 举报
回复
如果分别进行递规的话哪以f(n-1)为例子
n'=6
n''=5
n'''=4
n''''=3
n'''''=2
这是时候返回2~n'''''被释放!那么f(n-1)不就全是返回值2了!!!还有在哪本书上详细介绍了这种递规方法啊
lynnboy 2004-10-27
  • 打赏
  • 举报
回复
return(fun(n-1)+fun(n-2));
这一句,开辟两个临时数据,调用fun(n-1),存到第一个临时数据中,再调用fun(n-2),存到第二个临时数据中,然后返回相加后的值。
两次调用fun()都是独立的,分别继续进行迭代

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧