题目描述
编写一个求斐波那契数列的递归函数,输入n 值,使用该递归函数,输出如下图形(参见样例)。
输入
输入第一行为样例数m,接下来有m行每行一个整数n,n不超过10。
输出
对应每个样例输出要求的图形(参见样例格式)。
样例输入
1
6
样例输出
0
0 1 1
0 1 1 2 3
0 1 1 2 3 5 8
0 1 1 2 3 5 8 13 21
0 1 1 2 3 5 8 13 21 34 55
思路
既然题目说了让我们构造斐波拉契数列且每次的n不会大于10,那么可以先将1-19的斐波拉契数列计算出来存储进数组,之后根据n的不同进行取操作排列就可以了。思路大概是这样,之后如何进行排列就是小事了,斐波拉契数列的生成采用了递归的思想,具体请看函数实现
解答
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int getF(int m){
if(m == 1 || m == 2){
return 1;
}
return getF(m-1) + getF(m-2);
}
int main(void){
int N,m;
int F[20];
//先将20以内所有的斐波那契数列算出来
for(int i = 0; i < 20; i++){
if(i == 0) F[i] = 0;
else if(i == 1 || i == 2) F[i] = 1;
else F[i] = getF(i);
// printf("%d ",F[i]);
}
while(~scanf("%d",&N)){
for(int i = 0; i < N; i++){
scanf("%d",&m);
for(int i = 0; i < m; i++){
for(int j = 0; j < m-i-1; j++) printf(" ");
for(int j = 0; j < 2*i + 1; j++) printf("%d ",F[j]);
for(int j = 0; j < m-i-1; j++) printf(" ");
printf("\n");
}
}
}
}