算法笔记练习 4.3 递归 问题 B: 数列
题目
题目描述
编写一个求斐波那契数列的递归函数,输入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
代码
#include <stdio.h>
// fibonacci 返回斐波那契数列的第 n 项
int fibonacci(int n);
// printFibonacci 打印高度为 n 的题目要求的三角形
void printFibonacci(int n);
int main(){
int m, n;
while (scanf("%d", &m) != EOF){
while (m--){
scanf("%d", &n);
printFibonacci(n);
}
}
return 0;
}
int fibonacci(int n){
if (n == 1 || n == 2) return 1;
else return fibonacci(n-2) + fibonacci(n-1);
}
void printFibonacci(int n){
int i, j;
for (i = 0; i < n; ++i){
// 输出行首空格和 0
for (j = 0; j < 2*(n-i-1); ++j)
putchar(' ');
putchar('0');
// 输出斐波那契数列前 i*2 项
for (j = 0; j < i*2; ++j)
printf(" %d", fibonacci(j+1)); // 注意是 j+1
putchar('\n'); // 换行
}
}