斐波那契数列的几种写法 2021-02-23

简介: 斐波那契数列的几种写法 2021-02-23

斐波那契数列的几种写法

1. //递归写法
2. #include<stdio.h>
3. int feibo(int n)
4. {
5.  if(n==1) return 0;
6.  else if(n<=3) return 1;
7.  else return feibo(n-1)+feibo(n-2); 
8. }
9. int main()
10. {
11.   int a;
12.   scanf("%d",&a);
13.   printf("%d\n",feibo(a));
14.   return 0;
15.  }
1. //备忘录递归  解决重叠问题
2. #include <iostream>
3. #include <vector>
4. using namespace std;
5. int helper(vector<int> &memo,int n);
6. int fib(int n){
7.  if(n==0)return 0;
8.  vector<int> memo(n+1,0);
9.  return helper(memo,n);
10. }
11. int helper(vector<int> &memo,int n){
12.   if(n==1)return 0;
13.   if(n==2)return 1;
14.   if(memo[n]!=0) return memo[n];
15.   memo[n]=helper(memo,n-1)+helper(memo,n-2);
16.   return memo[n];
17. }
18. int main()
19. {
20.   int n;
21.   cin>>n;
22.   cout<<fib(n)<<endl;
23.   return 0;
24. }
1. //dp数组迭代
2. #include <iostream>
3. #include <vector>
4. using namespace std;
5. int fib(int n){
6.  if(n==1)return 0;
7.  if(n==2)return 1;
8.  vector<int> dp(n+1,0);
9.  dp[1]=0;
10.   dp[2]=1;
11.   for(int i=3;i<=n;i++)
12.     dp[i]=dp[i-1]+dp[i-2];
13.   return dp[n];
14. }
15. int main()
16. {
17.   int n;
18.   cin>>n;
19.   cout<<fib(n)<<endl;
20.   return 0;
21. }
1. //状态压缩
2. #include <iostream>
3. using namespace std;
4. int fib(int n){
5.  if(n==1)return 0;
6.  if(n==2)return 1;
7.  int prev=0,curr=1;
8.  for(int i=3;i<=n;i++){
9.    int sum=prev+curr;
10.     prev=curr;
11.     curr=sum;
12.   }
13.   return curr;
14. }
15. int main()
16. {
17.   int n;
18.   cin>>n;
19.   cout<<fib(n)<<endl;
20.   return 0;
21. }

 

相关文章
|
7月前
并查集的不同写法
并查集的不同写法
41 2
|
Serverless
编写求阶乘函数
编写求阶乘函数
|
7月前
生成斐波那契数列的几种不同的方法
生成斐波那契数列的几种不同的方法
108 0
|
C语言
【C语言初学必看】一知半解的for循环嵌套for循环
【C语言初学必看】一知半解的for循环嵌套for循环
167 0
全排列的两种写法 2021-02-17
全排列的两种写法 2021-02-17
用for循环求数的阶乘
用for循环求数的阶乘
133 0
|
机器学习/深度学习 算法
使用递归方法和for循环方法求阶乘
使用递归方法和for循环方法求阶乘
148 0
|
BI C语言
c语言中,利用for循环来解决,求n的阶乘问题(简化版 - - )
c语言中,利用for循环来解决,求n的阶乘问题(简化版 - - )
|
Python
Python 用类重载乘法运算符计算和打印杨辉三角形
Python 用类重载乘法运算符计算和打印杨辉三角形
90 0
|
C语言 容器
【C语言】为什么推荐把for循环写成左闭右开区间
循环十次打印"hello world",判定条件通常有两种写法:左闭右开区间、左闭右闭区间