常规
int main(){
int target=7,result;//target是要获取的数,result是结果
int a=1,b=1,c;
for(int i=2;i<target;i++)
{
c=a+b;
a=b;
b=c;
}
result=c;
printf("%d",result);
return 0;
}
动态规划
思想:最优解,分成若干个子问题求解
eg:第五个数fib[4]=fib[3]+fib[2](需要知道fib[3],fib[2])
而fib[3]=fib[2]+fib[1]
fib[2]=fib[1]+fib[0]
又fib[1], fib[0]已知
int main(){
int target=7;
int dp[target];//数组长度即要求的target
dp[0]=dp[1]=1;
for(int i=2;i<target;i++)
{
dp[i]=dp[i-1]+dp[i-2];
}
printf("%d",dp[target-1]);
return 0;
}
递归
#include <stdio.h>
int fib(int n){
if(n==2||n==1) return 1;
return fib(n-1)+ fib(n-2);
}
int main(){
printf("%d", fib(7));
}