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