您的位置:首页 > 其它

K阶斐波那契数列

2016-01-07 11:25 1221 查看
K阶斐波那契数列

定义:第k和k+1项为1,前k - 1项为0,从k项之后每一项都是前k项的和

例如:k = 3:,0 0 1 1 2 4 7 13

13 = 2 * 7 - 1

7 = 2 * 4 - 1

4 = 2 * 2 - 0

后一项等于 前一项的2倍 减去 前k+1项。这就是后面递归的原理

C语言实现:

能用递归和3种循环都实现是很不错的

#include <stdio.h>
#include <stdlib.h>
#define N 9//要计算的项
#define K 3//阶次

int Fib_1(int k, int m)
{//K阶斐波那契数列的前K-1项均为0,第k项为1,以后的每一项都是前K项的和
//本算法计算k阶斐波那契数列的第k项-递归实现
if (m < k)
return 0;
else if ((m == k) || (m == k + 1))
return 1;
else
return 2 * Fib_1(k, m - 1) - Fib_1(k, m - k - 1);//乘2了
}

int Fib_2(int k, int m)
{//K阶斐波那契数列的前K-1项均为0,第k项为1,以后的每一项都是前K项的和
//本算法计算k阶斐波那契数列的第k项-循环实现
int i;
int F
;
for (i = 0; i < k + 1; i++)
{
if (i < k - 1)
{
F[i] = 0;//前k - 1项为0
}
else
{
F[i] = 1;//k和k+1项为1
}
//printf("F[%d] = %d\n", i, F[i]);
}
for (; i < N; i++)
{
F[i] = 2 * F[i - 1] - F[i - k - 1];//计算的原理,大家一定要懂计算后一项的算法
//printf("F[%d] = %d\n", i, F[i]);
}
return F[m - 1];//数组的下标要减去1,第9项 = F[8]
}

int main(void)
{
//自己测试下吧
int m = Fib_2(K, N);
printf("m = %d\n", m);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: