斐波那契数列为从第三项开始,每一项都是前两项之和的数列,即
根据这个规律可以很容易写出第n项的递归函数:
void main()
{
cout << Fibonacci(8) << endl;
}
int Fibonacci ( int n )
{
if ( n <= 2 )
{
if (n == 0)
{
return 0;
}
return 1 ;
}
else
{
return Fibonacci ( n-1 ) + Fibonacci ( n-2 ) ;
}
}
不过如果我们要将前n项都显示出来就要换种思路了。
由于递归会使范围逐渐缩小,在数列中会逐渐减少到前两项,最后递归结束才开始从前两项运算回第n项,而由于第n项是由前两项相加得来,所以我们需要两个静态变量记录第n-1项与第n-2项,还需要一个临时变量将第n-2项在相加后换成第n-1项,所以先声明两个静态变量与一个局部变量,同时因为前两项设定为都是1,所以定义时初始化静态变量的值。
static int x=1, y=1;
int Temp;
然后我们写递归的结束条件,由于是从第三项开始算,所以递归到第n=2项时结束,即
if(n>2){}
而在第n=2项时要输出前两项的值,即
else{
cout << x << endl;
cout<< y << endl;
}
从第三项开始,第三项等于前两项之和,即第n-1项变为第n项,而第n-2项变为第n-1项,代码表示为
z = x;
x = x + y;
y = z;
由于是显示第n项的值,所以要加输出
cout << x << endl;
接下来就是放递归体了,由于思路是让递归结束后再从第三项开始逐步执行递增,那么我们的递归体就不能放在迭代体后面,且要从第n项递减,即Fibonacci(n-1),整体代码如下
void main()
{
int n;
cin >> n;
Fibonacci(n);
}
Void Fibonacci(int n){
static int x=1, y=1;
int Temp;
if (n > 2) {
Fibonacci(n - 1);
Temp = x;
x = x + y;
y = Temp;
cout << x << endl;
}
else {
cout << x << endl;
cout << y << endl;
}
}
要加前n项的和也很简单,加多个静态变量就可以了。