C语言 一些算法

1,斐波那契数列

①递归 时间复杂度O(2^n)
#include <stdio.h> int fib(int n){ if(n==1||n==2) return 1; return fib(n-1) + fib(n-2); } int main(){ int n; scanf("%d",&n); printf("%d\n",fib(n)); return 0; }
②循环 时间复杂度O(n)
#include <stdio.h>
int fibonacci(int n){
  int num1=1, num2=1, num3=0,i;
  if (n <= 2){
    printf("斐波拉契数列的第%d项为:%d\n",n,num1);
  }else{
    for (i = 2; i < n; i++){
      num3 = num1 + num2;
      num1 = num2;
      num2 = num3;
    }
    printf("斐波拉契数列的第%d项为:%d\n", n, num3);
  }
  return 0;
}

int main(){
  int num=0;
  printf("请输入一个正整数:");
  scanf("%d", &num);
  fibonacci(num);
  return 0;
}
③通项公式 时间复杂度O(1)
F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}(√5表示根号5)
所以,任何斐波那契数都可以在O(1)时间内计算出来,但是有一点,因为牵涉到无理数,所以无法保证精度。
④还有矩阵法,那个暂时不会,以后看线性代数的时候补回来。
奉上链接吧  http://blog.csdn.net/xygy8860/article/details/47087687

 

posted on 2017-07-18 14:40  _jackie  阅读(300)  评论(0编辑  收藏  举报

导航