您的位置:首页 > 编程语言 > C语言/C++

C语言 一些算法

2017-07-18 14:40 211 查看
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[/code] 
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: