C++用递归的方法求Fibonacci数列
题目1. 编程序,使用如下所谓的简单变量“数据平移”方法来求出Fibonacci数列的第n项(的具体项值)并显示在屏幕上(正整数n通过键盘输入):说明变量old1=1,old2=1,newItem;新的Fibonacci项newItem总是“距它最近”的前两项(old1与old2)的累加和。而后通过“old1=old2; old2=newItem;”进行所谓的“数据平移”。接着计算另一个新的Fibonacci项newItem,依次循环,直到求出数列的第n项时为止。
Fibonacci数列的计算公式如下:
fib(1) = 1;
fib(2) = 1;
fib(n) = fib(n-1) + fib(n-2); //对大于等于3的任意n
(一) 需求分析:
该题的目标是编制Fibonacci 函数,该函数的第一项和第二项都是1,可以用递归或非递归的Fibonacci 函数来求Fibonacci数列的第n项。该数列的定义如题目说述。
输入的值的原文请找腾讯752018766辣,文-论'文.网http://www.751com.cn/ 范围是从1到n的整数,理论上是这样的。输出的是fib(n)的值。
程序达到这样的功能,在提示语言下输入n的值,输出fib(n)的值。
测试的数据包括5,13,70等。这样可以代表所有的数据,整数和小数程序是如何处理的,还有如果是递归的,当n 比较大时,cpu 的执行效率是怎样的,这些都可以看出来。
(二) 概要设计:
程序主要用到int 型数据,返回的也是int 型数据。程序主要用到Fibonacci 函数,用到递归或非递归的求值方法。程序流程图如下:
(三) 详细设计:
非递归方式的Fibonaccci:
主要用到的是题目中说道的“数据平移”的方法,fabn=fab1+fab2,fab1=fab2,fab2=fabn;一直到n=1,n=2 时为止。(代码见实验代码1.cpp)
(四) 调试分析:
编制函数也比较简单,根据流程图,可以判定用到if 语句来判断n 的大小,最后都return fib(n-1)+fib(n-2),一直到n=1 或n=2 为止。
发现程序在n=70时,结果要等很久还不出来,因为程序非递归,数越大,效率比较低。当n=13.3时,函数自动把它转换成整数但是一直输出233。
(五) 用户使用说明:
根据提示输入一个int 型的整数n ,根据输入值判断,并输出他的值。
(辣) 测试结果:
当n=3时:当n=13时:当n=70 时:
(七) 源程序:见源代码1.cpp
(八) 编程体会:
这个题比较简单可以用递归和非递归两种方法做,这次使用了非递归的算法来解决这个问题。1826