把一个简单的递归函数转化为非递归

superspring 2009-12-04 01:20:05

/*
有100阶楼梯,一个人从底往上爬,每次爬1阶或2阶,请编个算法说明一共多少种走法?
*/

long getNumOfApproaches(int i){
if(i==1)
return 1;
else if(i==2)
return 2;
else
return getNumOfApproaches(i-1)+getNumOfApproaches(i-2);
}



上面这个递归函数效率显然很低, 如果这个算法经常要被调用,如何设法使效率提高?

可以改写成非递归吗? 或者有其他办法吗?
...全文
209 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fire_woods 2009-12-04
  • 打赏
  • 举报
回复
不說數學上的問題, 樓主這個遞歸可以倒過來算

p[1]=1;p[2]=2;
for(j=3;j<=i;j++) p[j]=p[j-1]+p[j-2];
return p[i];
zhengjiankang 2009-12-04
  • 打赏
  • 举报
回复
既然你知道递归函数了
而这个又要经常被调用
你把这个递归函数解出来啊。
这个用特征方程很容易求解得。
就是那种f(n) = a * x1^n + b * x2^n.那种形式了
然后函数直接返回这个算式。
调用起来不知道多方便了。

如果只是为了做这个问题
用那个递归算式已经是很好的做法了,
因为你得让别人明白你这个结果是怎么来的。
donkey301 2009-12-04
  • 打赏
  • 举报
回复
你编的是一个Fibonacci数列,下面是Fibonacci数列的非递归实现
http://blog.csdn.net/starlee/archive/2006/02/13/598036.aspx
maquan 2009-12-04
  • 打赏
  • 举报
回复
不知道楼主是要研究算法还是要解决实际问题?

如果要解决实际问题的话,你可以用这段程序建一个数组,下标是台阶数,值是 approaches,用的时候就查表,保证效率高 :)

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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