c++之递归函数

汉诺塔问题的递归实现。

不得不说很复杂,想了一晚上才想通了执行的过程,不知道是哪个伟人想出来的,竟然把递归用的如此出神入化,我等望尘莫及。

 1 #include <iostream>
 2 using namespace std;
 3 #include<string>
 4 
 5 void move(char x, char y)  
 6 {  
 7      cout<<x<<"-->"<<y<<endl;  
 8 } 
 9 
10 
11 void f(int n,char one,char two,char three){
12     if(n == 1){
13         move(one,three);
14     }else{
15         //首先将A上的n-1个盘子借助C移动到B上,
16         //然后将A上的最后一个大盘子移动到C上,
17        //最后将B上的n-1个盘子借组A移动到C上
18         f(n - 1,one,two,three);
19         move(one,three);
20         f(n - 1,two,one,three);
21     }
22 }
23 int main(){  
24      int m;  
25      cout<<"输入盘子数:";  
26      cin>>m;;  
27      f(m,'A','B','C'); 
28 }

 

转载于:https://www.cnblogs.com/Smart-Du/p/4314736.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值