一,递归阶乘
n! =n * (n - 1)....*1
#include<iostream>
using namespace std;
long a(int n)
{
if(n == 0)
return 1;
else
return n * a(n-1);
}
int main()
{
cout << a(5) << endl;
return 0;
}
二,递归求和
#include<iostream>
using namespace std;
long a(int n)
{
if(n == 0)
return 0;
else
return n + a(n-1);
}
int main()
{
cout << a(5) << endl;
return 0;
}
三,汉诺塔问题
#include<iostream>
using namespace std;
int i;
void move(int n,char from,char to)
{
cout << "第" << i++ << "步:将" << n << "号盘子" << from << "---->" << to << endl;
}
//汉诺塔递归函数
//n表示要将多少个"圆盘"从起始柱子移动至目标柱子
//start_pos表示起始柱子,tran_pos表示过渡柱子,end_pos表示目标柱子
void Hanio(int n,char start_pos,char tran_pos,char end_pos){
if(n==1){ //很明显,当n==1的时候,我们只需要直接将圆盘从起始柱子移至目标柱子即可.
move(n,start_pos,end_pos);
}
else{
Hanio(n-1,start_pos,end_pos,tran_pos); //递归处理,一开始的时候,先将n-1个盘子移至过渡柱上
move(n,start_pos,end_pos); //然后再将底下的大盘子直接移至目标柱子即可
Hanio(n-1,tran_pos,start_pos,end_pos); //然后重复以上步骤,递归处理放在过渡柱上的n-1个盘子
//此时借助原来的起始柱作为过渡柱(因为起始柱已经空了)
}
}
int main(){
int n;
cout << "输入需要移动盘子的个数:" << endl;
cin >> n;
i = 1; //全局变量赋初始值
Hanio(n,'A','B','C');
cout << "最后总的步数为" << (i-1) << endl;;
return 0;
}