契波那契数列最常见的解法,递归如下:
public class Solution { public int Fibonacci(int n) { if(n == 0) return 0; else if(n == 1) return 1; return Fibonacci(n-1)+Fibonacci(n-2); } }
常规解法,剑指书上的推荐解法。为什么要用这种解法呢,自然就是因为递归时有可能很多计算都是重复的,递归调用的层数太多时,还有可能会出现调用栈溢出的问题。代码如下:
public class Solution { public int Fibonacci(int n) { int[] result = {0,1}; if(n<2) return result[n]; int FibMinusOne = 1; int FibMinusTwo = 0; int FibN = 0; for(int i=2; i<=n ; ++i){ FibN = FibMinusOne + FibMinusTwo; FibMinusTwo = FibMinusOne; FibMinusOne = FibN; } return FibN; } }