汉诺塔hanoi

2024-06-16 19:32
文章标签 汉诺塔 hanoi

本文主要是介绍汉诺塔hanoi,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

递归汉诺塔

这个递归的例子已经见过好多次了,但是每次遇到的时候,或多或少都出过bug,现在来总结一下,以便后面会用到

#include <iostream>using namespace std;void hanoi(int n,char here, char temp, char there)
{if(n == 1){cout << 1 << "从"<<here<<"到"<<there << endl;return ;}else{hanoi(n-1,here,there,temp);//把here上的n-1个盘子移动到temp临时柱子上,这样就可以把第n个盘子从here移动到there了cout << n << "从"<<here<<"到"<<there << endl;hanoi(n-1,temp,here,there);//然后再把temp柱子上的n-1个盘子移动到there上面,这样就结束了}
}
int main()
{hanoi(3,'a','b','c');//把三个盘子,从a柱子移动到c柱子上面return 0;
}

因为是递归的过程,所以不必要理解每一步是怎么移动的,只需要知道,这一步到下一步是怎么移动的就好了

这篇关于汉诺塔hanoi的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067338

相关文章

HDU 2064 汉诺塔III(水题)

题目: http://acm.hdu.edu.cn/showproblem.php?pid=2064 题目大意: 有三根杆,求把n个圆盘从左边移到右边,最少需要移动圆盘的次数。移动规则为大盘不能放在小盘上,比原始的汉诺塔题改变的地方是,只能通过中间的杆往左右两边的杆移动。 心得: 此题心得在题外,不在题内,初看此题,尼玛吓了一跳,好像很难的样子,手贱百度了一下,只注意到俩字“水题”,赶紧

【递推】【DP】-HDU-2064-汉诺塔③

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2064 题目描述:从最左边移到最右边柱子的过程中必须经过中间柱子。 解题思路: 进ACM组时候的考试题,当时虐我的题终于被我虐回来了。。一眼看出方程,1A了。。。呵呵。。满足一下我的虚荣心,,,抚慰一下受挫的心灵吧。 AC代码: #include <iostream>using names

【递推】【DP】-HDU-1996-汉诺塔⑥

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1996 题目描述:问三个柱子上放N个盘子,一共可能有多少种组合?(可以有柱子不放,放的时候依然满足下面盘子比上面盘子大) 解题思路: 对于放N个盘子,ans [ N ] = 3 + 6 * f ( N ) +6 * g ( N ) 这三项依次代表这N个盘子分成一堆,两堆,三堆时有多少种可能。排列

【递推】【DP】-HDU-1995-汉诺塔⑤

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1995 题目描述:计算汉诺塔中某个盘子的移动次数 解题思路: 想了好久,突然顿悟! 思路如下,所谓递推,即是前者与后者存在直接联系,由前者可以直接推出后者,因此必须有一端是已知的,这题里显然最下面的盘子只被动了一次,这就是开端,然后我们考虑紧挨着的两张盘子的递推关系,发现上面盘子是紧挨着的下面盘

【递推】【DP】-HDU-1207-汉诺塔②

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1207 题目描述:四柱汉诺塔 解题思路: 开始想了方程 f [ n ] = 2 * f [n - 2] + 3和 f [ n ] = 2 * f [n - 3] + 7。结果都不对,很郁闷,纠结半天之后,上网查攻略去了,啊!我就差一点了,但也是差了最为关键的一步! 正确的方程应该是: f [

Python 汉诺塔递归原理

# -*- coding: utf-8 -*- # 递归的重点在于放弃,放弃理解和跟踪递归全程的企图,只理解递归两层之间的交接,以及递归的终结条件def move(n, start, mid, end): # n:盘子,start起始区,mid中转区,end终点区if n == 1:print('move', start, '-->', end)else:move(n-1, start, e

迭代和递归(Python)--乘方、最大公约数、汉诺塔、斐波那契、回文字符串

1.迭代 def iterPower(base,exp):result=1.0while exp>0:result*=baseexp-=1return result 运行结果: 2.递归的乘法运算: def recurMul(a,b):if b==1:return aelse:return a+recurMul(a,b-1) 运行结果: 3.递归乘方

青蛙跳台阶与汉诺塔问题

hello,各位小伙伴们上次我们复习了C语言小tip之函数递归,这次我们来使用函数递归来完成青蛙跳台阶和汉诺塔问题! 青蛙跳台阶问题 青蛙跳台阶问题:一只青蛙跳n阶台阶,一次可以跳1阶或者两阶,问有多少种情况! 如果跳1节台阶的话,只有一种情况,如果跳2节台阶的话,有两种情况一次跳一阶,或者一次性跳两阶。如果跳3节台阶的话,可以选择一次跳一节,或者第一次跳一节,第二次跳两节或者第一次跳两节,

面试题 08.06. 汉诺塔问题(整活版)(不讲武德)

题目具体要求看面试题 08.06. 汉诺塔问题(递归法)-CSDN博客 class Solution {public:void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {C=A;A.clear();}};

【具体数学 Concrete Mathematics】1.1.1 汉诺塔问题

【具体数学 Concrete Mathematics】1.1.1 汉诺塔问题 汉诺塔问题的设定是:给定一个由8个圆盘 1 − 8 1-8 1−8( 1 1 1号圆盘最小, 8 8 8号圆盘最大)和三根柱子 A , B , C A,B,C A,B,C,从上向下这些圆盘大小逐渐递减(即圆盘不能放在比自身小的圆盘上)放在柱子 A A A上。 问: 最少需要多少步能够将所有圆盘都转移到柱子 C C C