菲波那切数列
1.递归解法
#include<cstdio>
#include<algorithm>
//菲波那切数列
int Fib(int n){
if(n == 0 || n== 1) return 1;
else return Fib(n-1)+ Fib(n-2);
}
int main(){
int n;
scanf("%d",&n);
int sum = Fib(n);
printf("%d",sum);
}
/*菲波那切部分数列
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597……
**/
2.动态规划解法
#include<cstdio>
#define maxn 1000
int dp[maxn];//暂存每个子问题的解
void init(){
for(int i = 0;i< maxn;i++){
dp[i] = -1;
}
}
//使用动态规划求斐波那契数列
int solve(int n){
if(n == 0|| n == 1) {
dp[0] = 1;
dp[1] = 1;
}
if(dp[n] != -1){
return dp[n];//已经求过的dp数组直接返回
}
else{
dp[n] = solve(n-1) + solve(n-2);
}
return dp[n];//这才是最后要返回的结果
}
int main(){
int n ;
init();//初始化数组
scanf("%d",&n);
solve(n);//调用solve函数
printf("%d",dp[n]);
}