斐波那契数列
f(n)=f(n-1)+f(n-2)
直接使用递归计算:
#include<iostream> using namespace std; int count=0; //记录fibo函数调用的次数 int fibo(int n){ count++; if(n==0 || n==1){ return 1; }else{ return fibo(n-1)+fibo(n-2); } } int main(){ int n=24; cout<<fibo(n)<<endl; cout<<"fibo函数被调用了"<<count<<"次"<<endl; return 0; }
orisun@zcypc:~$ ./fibo
75025
fibo函数被调用了150049次
150049次!实际上有很多重复计算,比方说你计算f(5)时要去计算f(4)和f(3),而计算f(4)时又要去计算f(3),这样f(3)就重复计算了。
所以有必要发明一种非递归的方法:
#include<iostream> #include<stack> using namespace std; stack<int> st; int fibo(int n){ if(n==0 || n==1) return 1; else{ st.push(1); st.push(1); } for(int i=2;i<=n;i++){ int a=st.top(); st.pop(); int b=st.top(); int c=a+b; st.push(a); st.push(c); } return st.top(); } int main(){ int n=24; cout<<fibo(n)<<endl; return 0; }
本文来自博客园,作者:张朝阳讲go语言,转载请注明原文链接:https://www.cnblogs.com/zhangchaoyang/articles/2253639.html