1【阶乘递归】
#include<iostream>
using namespace std;
int fun(int x){
if(x==1){
return 1;
}
return x*fun(x-1);
}
int main(){
int x;
cin>>x;
cout<<fun(x);
return 0;
}
2【累加递归】
#include<iostream>
using namespace std;
int fun(int x){
if(x==1){
return 1;
}
x=x+fun(x-1);
return x;
}
int main(){
int x;
cin>>x;
cout<<fun(x);
return 0;
}
3【最大公因数递归】
#include<iostream>
using namespace std;
int gcd(int a,int b){
if(a%b==0){
return b ;
}
return gcd(b,a%b);
}
int main(){
int a,b;
cin>>a>>b;
cout<<gcd(a,b);
return 0;
}
4【进制转换递归】
#include<iostream>
#include<cmath>
using namespace std;
int fun(int a,int i){
if(a==0){
return 0;
}
return a%10*pow(8,i)+fun(a/10,i+1);
}
int main(){
int a,i=0;
cin>>a;
cout<<fun(a,i);
return 0;
}
5【汉诺塔递归】
//汉诺塔问题:
//前n-1个(动第一次):以A为起始柱,经过C到B
//第n个:从A直接到C
//前n-1个(动第二次):以B为起始柱,经过A到C
#include<iostream>
#include<cmath>
using namespace std;
int fun(int n,char a,char b,char c){
if(n>0){
fun(n-1,a,c,b);
cout<<a<<"->"<<c<<endl;
fun(n-1,b,a,c);
}
}
int main(){
int m;
cin>>m;
fun(m,'A','B','C');//传参传的是字符
return 0;
}
6【斐波那契数列】(普通版)
//斐波那契数列(普通版)
#include<iostream>
using namespace std;
int fun(int n){
if(n==1){
return 0;
}
if(n==2){
return 1;
}
if(n!=0&&n!=1){
return fun(n-1)+fun(n-2);
}
}
int main(){
int n;
cin>>n;
cout<<fun(n);
return 0;
}
7【斐波那契数列】(递归的记忆化)
//斐波那契数列递归优化 (递归的记忆化)
//就是找个数组存已经求过的递归值,到需要用的时候直接拿出来用
//减少时间复杂度
//注意题目!一般会有模的要求(如果没有也不需要优化递归了吧)
#include<iostream>
#include<cmath>
using namespace std;
int f[1005]={0,1,1};
int fun(int n){
if(f[n]!=0){
return f[n];//如果存递归的数的数组已经有值了,直接用就行
}
else{//如果没求过,就用递归的方法求,再存到数组里
f[n]=fun(n-1)+fun(n-2);//如果有模的要求,在这里模
return f[n];
}
}
int main(){
int n;
cin>>n;
cout<<fun(n);
return 0;
}