斐波那契数列的几种写法 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. }

 

相关文章
|
1月前
生成斐波那契数列的几种不同的方法
生成斐波那契数列的几种不同的方法
16 0
|
4月前
|
算法 测试技术 C#
C++二分查找算法:阶乘函数后 K 个零
C++二分查找算法:阶乘函数后 K 个零
|
9月前
全排列的两种写法 2021-02-17
全排列的两种写法 2021-02-17
|
10月前
|
机器学习/深度学习 算法
使用递归方法和for循环方法求阶乘
使用递归方法和for循环方法求阶乘
117 0
|
10月前
用for循环求数的阶乘
用for循环求数的阶乘
71 0
斐波那契数列的几种实现方法
斐波那契数列的几种实现方法
75 0
爬楼梯 -- 斐波那契数列,尾递归
爬楼梯 -- 斐波那契数列,尾递归
|
算法 Java 索引
leetcode 344. 反转字符串 递归写法
leetcode 344. 反转字符串 递归写法
leetcode 344. 反转字符串 递归写法
|
存储 数据处理 C++
C/CPP基础练习题(二)简单循环(2 + 22 + 222…;斐波那契数列)
C/CPP基础练习题(二)简单循环(2 + 22 + 222…;斐波那契数列)
301 0
C/CPP基础练习题(二)简单循环(2 + 22 + 222…;斐波那契数列)