K阶斐波那契数列

来源:互联网 发布:淘宝号安全风险查询 编辑:程序博客网 时间:2024/06/06 18:29

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[N];    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;}
0 0
原创粉丝点击