记忆数组
斐波那契数 优化
#include<iostream>
using namespace std;
long long num[50];
long long f(int n){
if(n==0||n==1) return 1;
if(num[n]) return num[n];
return num[n]= f(n-1) + f(n-2);
}
int main(){
for(int i=1;i<=40;i++){
cout<<i<<" : "<<f(i)<<endl;
}
return 0;
}
最长考拉兹序列
#include<iostream>
using namespace std;
int num[10000000];
int f(long long n){
if(n==1) return 1;
if(n<10000000 && num[n]) return num[n];
int t;
if(n%2==0){
return t=f(n/2)+1;
}else{
return t=f(3*n+1)+1; //加一代表进入一层递归就是多一个
}序列
if(n<10000000){
num[n]=t;
}
return t;
}
int main(){
int ans=1;
for(int i=1;i<=1000000;i++){
if(f(ans)<f(i)){
ans=i;
}
}
cout<< ans <<endl;
return 0;
}