已知K阶斐波那契数列定义为:
f0 = 0, f1 = 0, … , fk-2 = 0, fk-1 = 1;
fn = fn-1 + fn-2 + … + fn-k , n = k , k + 1, …
给定阶数k和n的值,求fn的值。
既然是递归数列,那我们就用递归函数来实现,具体代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int func(int k, int n); 5 6 int fibonacci(int k, int n){ 7 8 if(k<1){ 9 return 0; 10 } 11 12 if(n<k){ 13 return 0; 14 } 15 int i = 0; 16 int sum = 0; 17 for(i=1;i<=n;i++){ 18 sum = func(k, i); 19 20 printf("fibonacci %d sum is %d ", i, sum); 21 } 22 23 24 return 0; 25 } 26 27 int func(int k, int n) 28 { 29 int i = 0,sum = 0; 30 if(n<k-1){ 31 return 0; 32 }else if(n == k-1){ 33 return 1; 34 }else{ 35 for(i=1;i<k+1;i++){ 36 sum = sum+func(k, n-i); 37 } 38 } 39 return sum; 40 } 41 42 int main(){ 43 44 int k,n; 45 printf("Please input fibonacci order: "); 46 scanf("%d",&k); 47 printf("Please input fibonacci num :"); 48 scanf("%d",&n); 49 fibonacci(k, n); 50 51 52 return 0; 53 54 }
大家有其他更好的算法,欢迎留言讨论,共同学习。
关于斐波那契的一个小段子,跟大家分享,说学校食堂的菜就是八大菜系之后的第九大菜系斐波那契菜,哈哈哈。
博客地址:https://www.cnblogs.com/r-yan/