AcWing 717. 简单斐波那契
以下数列 0 1 1 2 3 5 8 13 21 ...
被称为斐波纳契数列。
这个数列从第 33 项开始,每一项都等于前两项之和。
输入一个整数 \(N\),请你输出这个序列的前 \(N\) 项。
输入格式
一个整数 \(N\)。
输出格式
在一行中输出斐波那契数列的前 \(N\) 项,数字之间用空格隔开。
数据范围
\(0<N<46\)
输入样例:
5
输出样例:
0 1 1 2 3
解题思路:
首先,判断数据范围,n小于46,可适用递推或者dp来解决。这个题使用递归时会超时,就可以使用记忆化搜索。
递推:
记忆化搜索:
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 50;
int f[N];
int n;
int fib(int n) {
// f[n] 如果不是0,就表明它被计算过,直接返回。
if (f[n]) return f[n];
if (n == 1) return f[1] = 0; // 等价于 f[1] = 0; return 0;
if (n == 2) return f[2] = 1; // 等价于 f[2] = 1; return 1;
return f[n] = fib(n - 1) + fib(n - 2);
/* 等价于
int temp = fib(n-1) + fib(n-1);
f[n] = temp;
*/
}
int main() {
cin >> n;
fib(n);
for (int i = 1; i <= n; i++) cout << f[i] << ' ';
return 0;
}
标签:fib,return,数列,717,斐波,int,那契
From: https://www.cnblogs.com/neko333/p/17980043