携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
什么是斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
简单来说斐波那契数列就是前两项都是1然后后面的项都是这个项的前两项之和,这就是斐波那契数列。
斐波那契数列的简单代码化
斐波那契数列讲究的是递归,那么代码就很清晰了~
我们可以把斐波那契数列看成是一颗二叉树
但是我们需要看到的是,如果要求斐波那契的第10000项怎么办?无数次的递归,这里头包含了多次重复的递归求法,那有什么办法来改进呢?
备忘录·斐波那契
我们记录一下斐波那契的每一项,当深层递归时,如果找到了备忘录就直接用备忘录里面的值
真题:
7-1 斐波那契数列第N项(10 分)
题目描述:
输出斐波那契数列第N项(假设N<1000)。斐波那契数列:1,1,2,3,5,8,13……
输入格式:
一个正整数N, 表示斐波那契数列第N项。
输出格式:
斐波那契数列第n项的值
输入样例:
5
输出样例:
5
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
long long momo[1005];
long long fib(int n) {
if (n <= 0)
return -1;
if (n == 1 || n == 2)
return 1;
if (momo[n] != -1)
return momo[n];
momo[n] = fib(n - 1) + fib(n - 2);
return momo[n];
}
int main()
{
long long n;
cin >> n;
memset(momo, -1, 1005);
cout << fib(n);
}