700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 递归算法--斐波那契数列

递归算法--斐波那契数列

时间:2023-12-29 16:50:47

相关推荐

递归算法--斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39

很容易我们想到使用递归求解:

public class Solution {public int Fibonacci(int n) {if(n == 0)return 0;if(n == 1)return 1;return Fibonacci(n-2) + Fibonacci(n-1);}}

当n比较大时,可以明显感觉算法运行速度比较慢,这是由于上述返回代码中使用了两层递归,使用递归的思想是好的,但是这里我们可以用迭代明显改善算法运行效率,用空间换时间:

public class Solution {public int Fibonacci(int n) {if(n < 2)return n;int f = 0, g = 1;int result = 0;for(int i = 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 {public int RectCover(int target) {if(target <= 1){return 1;}if(target*2 == 2){return 1;}else if(target*2 == 4){return 2;}else{return RectCover((target-1))+RectCover(target-2);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。