首页 > 编程知识 正文

递归法实现斐波那契数列,斐波那契数列的递归算法与非递归算法

时间:2023-05-04 09:04:40 阅读:178025 作者:3433

大家都知道斐波那契数列。 这里需要输入整数n。 请输出斐波那契数列的n项(从0开始,0项为0 )。 n=39考虑递归求解很简单:

public class solution { public int Fibonacci (intn ) ) if ) n==0)返回0; if(n==1)返回1; returnFibonacci(n-2 ) Fibonacci (n-1 ); }n较大时,可以明显感觉到算法的执行速度较慢,是因为上述返回代码中使用了2层递归,使用递归的思路比较好,但在这里使用迭代可以明显改善算法的执行效率,在空间上改变时间

公共类解决方案{公共int Fibonacci (intn ) ) if ) n2 )返回n; int f=0,g=1; int result=0; for(intI=1; i n; I ) { result=f g; f=g; g=result; } return result; }问题的变形可以用2*1的小矩形横向或纵向,覆盖更大的矩形。 要用n个2*1小矩形重复覆盖2*n大矩形,共有几种方法?

分析

关于n步骤操作,可以分为以下两种情况进行讨论。

1 .第一步这样涵盖

那么f(n )=f(n-1 );

2 .第一步这样涵盖

下一步只有这样涵盖的可能性

那么f(n )=f (n-2 ) ) )。

因此,f(n )=f(n-1 ) f (n-2 )

public class solution { publicintrectcover (int target ) if ) target=1} { return 1; (if ) target*2==2) { return 1; }elseif(target*2==4) ) { return 2; } else { returnrectcover ((target-1 ) ) rect cover (target-2 ); } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。