递归算法--斐波那契数列,Go语言社区,Golang程序员人脉社 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n 很容易我们想到使用
大家都知道斐波那契数列,现在要求输入一个整数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我们可以用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); } }}【本文由:大丰网站开发 http://www.1234xp.com/dafeng.html 处的文章,转载请说明出处】