递归和动态规划(一)斐波那契数列问题

【题目】

给定整数N,返回斐波那契数列的第N项。
补充问题1:给定整数N,代表台阶数,一次可以跨2个或者1个台阶,返回有多少种走法。

【要求】

实现时间复杂度为O(2^n),O(N),O(logN)的解法。

【解答】

O(2^n):斐波那契数列为1,1,2,3,5,8,…,即可的递推公式F(N)=F(N-1)+F(N-2)

punlic int f1(int n){
  if(n<1){
  return 0;
  }
  if (n==1 || n==2){
  return 1;
  }
  return f1(n-1)+f1(n-2);
}

O(N):斐波那契数列可以从左到右依次求出每一项的值,所以可以顺序计算到第N项位置

punlic int f2(int n){
  if(n<1){
  return 0;
  }
  if (n==1 || n==2){
  return 1;
  }
  int res = 1;
  int pre = 1;
  int tmp = 0;
  for(int i = 3;i<=n;i++){
    tmp = res;
    res = res+pre;
    pre = tmp;
  }
  return res;
}

O(logN):太难了以后通了再补充。

猜你喜欢

转载自blog.csdn.net/sand_wich/article/details/105389857