斐波那契数列
描述
大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。
斐波那契数列是一个满足
输入描述:
仅输入一个正整数 n。
输出描述:
输出斐波那契数列中第 n 个数。
示例1
输入:
4
输出:
3
说明:
根据斐波那契数列的定义可知,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3,所以答案为3。
//递归
#include<bits/stdc++.h>
using namespace std;
//斐波那契数列
int fib(int n){
if(n==1||n==2){
return 1;
}
else{
return fib(n-1)+fib(n-2);
}
}
int main(){
int n;
cin>>n;
int m;
m=fib(n);
cout<<m;
return 0;
}
由于在递归过程中每次计算都会再多算已经算过的数值,例如求fib(5)=fib(4)+fib(3),在求fib(5)的时候需要知道fib(4),但求fib(4)的时候已经算过fib(4)了,相当于重复计算。
于是使用动态规划来减少计算,例如加入dp[],这时求dp[5]时,dp[4]早已存在数组里,不用再计算了,减少了计算
//非递归
#include<bits/stdc++.h>
using namespace std;
//斐波那契数列
int dp[41];
int main(){
int n;
cin>>n;
dp[1]=1;
dp[2]=1;
int temp=3;
while(n>=temp){
dp[temp]=dp[temp-1]+dp[temp-2];
temp++;
}
cout<<dp[n];
return 0;
}