“斐波那契数列”问题的递推算法

来源:互联网 发布:判断反常积分收敛知乎 编辑:程序博客网 时间:2024/05/05 07:02
/*
    标题:<<系统设计师>>应试编程实例-[递推算法程序设计]
    作者:成晓旭
    时间:2002年09月11日(11:52:00-16:26:00)
          实现递推算法的大整数阶乖处理函数
    时间:2002年09月16日(18:38:00-20:02:00)
          实现“斐波那契数列”问题的递推算法函数
*/

#include    
"stdio.h"
#include    
"stdlib.h"
//:============================“斐波那契数列”问题的递推算法===========================
/*
    问题描述:
        标准斐波那契数列:
            F(0) = 0,F(1) = 1,Fn) = F(n-2) + F(n-1)(当n > 1时)
        广义斐波那契数列:
            F(0) = 0,F(1) = 0,F(2) = 1,Fn) = F(n-3) + F(n-2) + F(n-1)(当n > 2时)
*/

//标准斐波那契数列的递推算法函数
int        Std_Fibonacci(int number)
{
    
int    f0 = 0,f1 = 1,result,loop;    //初始值1,2,返回结果,循环计数器
    if(number == 0)        return(0);
    
if(number == 1)        return(1);
    
for(loop = 2;loop <= number;loop ++)
    
{
        result 
= f0 + f1;    //由前两步的结果计算当前结果--->“推出”
        f0 = f1;            //把原来的前一步当作下一次的前两步--->“传递”
        f1 = result;        //把当前结果当作下一次的前一步--->“传递”
    }
//注意:在进行这种向前传递的操作时,特别小心传递的时序
    return(result);
}

//广义斐波那契数列的递推算法函数
int        Ext_Fibonacci(int number)
{
    
int    f0 = 0,f1 = 0,f2 = 1,result,loop;    //初始值1,2,3,返回结果,循环计数器
    if(number == 0 || number == 1)        return(0);
    
if(number == 2)        return(1);
    
for(loop = 2;loop <= number;loop ++)
    
{
        result 
= f0 + f1 + f2;    //由前三步的结果计算当前结果
        f0 = f1;
        f1 
= f2;
        f2 
= result;
    }
//注意:在进行这种向前传递的操作时,特别小心传递的时序[即:变量间赋值的前后关系及先后顺序]
    return(result);
}

void    Run_Fibonacci()
{
    
int    large,result;
    
while(large!=9910)
    
{
        printf(
" 请输入斐波那契数列的元素个数[Enter '9910' to Exit]:");
        scanf(
"%d",&large);
        
if(large!=9910)
        
{
            
//result = Std_Fibonacci(large);
            result = Ext_Fibonacci(large-1);
            printf(
"斐波那契数据中的第[%d] = %d ",large,result);
        }

    }

}

//:============================“斐波那契数列”问题的递推算法===========================


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=935927


原创粉丝点击