题目描述
斐波那契数列的定义:
令F(n)表示斐波那契数列的第n项,则:
当n=1时,F(n)=1;
当n=2时,F(n)=1;
当n>2时,F(n)=F(n-1)+F(n-2)。
下面是斐波那契数列问题的递归实现方式的伪代码:
F(n) {
输出调试信息;
if (n <= 2) {
return 1;
} else {
return F(n - 1) + F(n - 2);
}
}
递归代码的调试往往会很头疼,一个很重要的原因是在递归代码中输出的信息会因为多层而混在一起。但如果我们能在输出的调试信息前先输出一些和递归深度相关的数量的空格,就可以看出递归的层级,方便我们调试。例如当递归深度为1时先输出0个空格,递归深度为2时先输出4个空格,递归深度为3时先输出8个空格,以此类推,递归深度每多1,空格的个数就多4个)。
请实现上面的做法。
输入描述
一个正整数n(1≤n≤12)。
输出描述
按题目描述的方式,每行输出调试信息,格式如下:
[与递归深度相关的一堆空格]n=具体值
样例1
输入
1
输出
n=1
样例2
输入
2
输出
n=2
样例3
输入
3
输出
n=3 n=2 n=1
样例4
输入
4
输出
n=4 n=3 n=2 n=1 n=2
样例5
输入
5
输出
n=5 n=4 n=3 n=2 n=1 n=2 n=3 n=2 n=1
代码:
#include<iostream>
using namespace std;
int fun(int n,int depth){
for(int i=0;i<depth-1;i++) {cout<<" ";}
cout<<"n="<<n<<endl; //注意是输出n
if(n<=2) return 1;
else return fun(n-1,depth+1)+fun(n-2,depth+1);
}
int main(){
int n;
while(cin>>n){
if(n==0) break;
fun(n,1);
}
return 0;
}