AcWing 717. 简单斐波那契

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;
}


posted @ 2024-01-22 14:52  neKo2333  阅读(1808)  评论(0)    收藏  举报