题目
输出斐波那契数列前 n 项
思路
本题输出斐波那契数列的前 n 项(通常从 1, 1, 2, 3… 开始)。
读入 n 后,先设前两项 a=1, b=1。在循环里打印当前项,再用 c=a+b; a=b; b=c 滚动到下一对;n==1 时只输出一项,需单独分支。
解题分析
输出前 n 项用滚动变量 a、b 更新,比递归重复计算快很多。f1、f2 为 1 的约定与第 52 题单求第 n 项一致。
完整程序
#include <stdio.h>
int main(void)
{
int n;
if (scanf("%d", &n) != 1 || n < 1) {
return 1;
}
long long a = 1, b = 1;
for (int i = 1; i <= n; i++) {
if (i <= 2) {
printf("%lld", a);
} else {
long long c = a + b;
printf("%lld", c);
a = b;
b = c;
}
if (i < n) {
putchar(' ');
}
}
putchar('\n');
return 0;
}
运行示例
输入:
7输出:
1 1 2 3 5 8 13其它写法
下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。
数组存每一项再输出
程序:
#include <stdio.h>
int main(void)
{
int n;
if (scanf("%d", &n) != 1 || n < 1 || n > 50) {
return 1;
}
long long f[51];
f[1] = f[2] = 1;
for (int i = 3; i <= n; i++) {
f[i] = f[i - 1] + f[i - 2];
}
for (int i = 1; i <= n; i++) {
printf("%lld%c", f[i], i < n ? ' ' : '\n');
}
return 0;
}运行示例
输入:
7输出:
1 1 2 3 5 8 13