算法学习之递归--汉诺塔问题
来源:互联网 发布:外商投资网络支付机构 编辑:程序博客网 时间:2024/04/27 07:18
一个函数调用其自身就是递归。最经典的递归求阶乘如下:
int Factorial(int n){ if(n == 0) return 1; return n * Factorial(n-1);}
递归和普通函数调用都是通过栈实现的。
汉诺塔问题
古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动的步骤。
汉诺塔问题手工模拟解法如下图所示:
递归解决:
#include<iostream>using namespace std;/*将src座上的n个盘子,以mid座为中转,移动到dest座*/void Hanoi(int n, char src, char mid, char dest){ if(n == 1){ //只需移动一个盘子 cout<<src<<"->"<<dest<<endl;//直接将盘子从src移动到dest即可 return ; //递归终止 } Hanoi(n-1,src,dest,mid); //先将n-1个盘子从src移动到mid cout<<src<<"->"<<dest<<endl; //再将一个盘子从src移动到dest Hanoi(n-1,mid,src,dest); //最后将n-1个盘子从mid移动到dest return ;}int main(){ int n; cin>>n; Hanoi(n,'A','B','C'); return 0;}
阅读全文
0 0
- 算法学习之递归--汉诺塔问题
- 递归算法之汉诺塔问题
- 递归算法之汉诺塔问题
- 递归算法之Hanoi(汉诺塔)问题学习
- 算法学习之递归--N皇后问题
- 算法学习之递归--爬楼梯问题
- 算法学习之递归--放苹果问题
- 数据结构学习之_汉诺塔递归算法
- 递归算法学习系列之经典背包问题
- 递归算法学习系列之经典背包问题
- 递归算法学习系列之八皇后问题
- 递归算法学习系列之经典背包问题
- 递归算法学习系列之八皇后问题
- 经典算法之传染病问题 递归用法学习
- 递归算法学习系列之八皇后问题
- 递归算法学习系列之经典背包问题
- 递归算法学习之蛙跳问题——01
- 算法学习之递归--4个数组成24的问题
- Linux 系统搭建 Web 服务器
- 【Hibernate】设置inverse属性,在多对多种维护关联关系的影响?
- 约瑟夫环
- MySQL 5.7 安装问题记录
- linux 5
- 算法学习之递归--汉诺塔问题
- 算术表达式的转换
- hdu5969最大的位或(二进制思维)
- 约瑟夫环问题的数组解法与单链表解法
- 一些常用的集合工具的代码块(缓慢更新XD)
- 数字
- 添加Cloud广告
- 【龙队的胡策】训练8.21(?+dp+lct)
- HDU --- 5446 Unknown Treasure 数论综合【Lucas定理 + 中国剩余定理 + 快速乘 + 思维】