Go基础之函数递归实现汉诺塔

Go递归实现汉诺塔

package main

import "fmt"

// a 是源,b 借助, c 目的长度
func tower(a, b, c string, layer int) {
    if layer == 1 {
    fmt.Println(a, "111->", c)
        return
}

// n-1 个 a 借助 c 到 b
tower(a, c, b, layer-1)
fmt.Println(a, "11->", c)
// b n-1 借助a移动到c
tower(b, a, c, layer-1)

}
func main() {
    tower("a", "b", "c", 3)
}

原文地址:https://www.cnblogs.com/JevonWei/p/11110506.html

时间: 2024-10-31 16:32:44

Go基础之函数递归实现汉诺塔的相关文章

Python函数递归之汉诺塔

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, 在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上. 并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 汉诺塔的移动问题,汉诺塔的三个圆柱分别标注为A.B.C,圆盘开始是在A圆柱上面并上从下往上按照大小顺序摞着圆盘,需要将其移动到 C圆柱,递归的思路是: (1)A上的的圆盘个数n = 1,那么很直接,直

16、蛤蟆的数据结构笔记之十六栈的应用之栈与递归之汉诺塔问题

16.蛤蟆的数据结构笔记之十六栈的应用之栈与递归之汉诺塔问题 本篇名言:"人生的价值,并不是用时间,而是用深度去衡量的." 继续栈与递归应用,汉诺塔问题. 欢迎转载,转载请标明出处: 1.  汉诺塔问题 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一

20150410 递归实现汉诺塔算法

20150410 递归实现汉诺塔算法 2015-04-10 Lover雪儿 1 //汉诺塔 2 #include <stdio.h> 3 4 static int i = 0; 5 6 //将n个盘子从x借助y移动z 7 //n:移动的个数 x:源地址 y:中间柱子 z:目的柱子 8 void move(int n, char x, char y, char z) 9 { 10 if(1 == n){ 11 printf("第%d次移动 %c--->%c\n", ++

递归__汉诺塔

要将n个盘子从a 通过b 移动到c那么 就要先将 n-1个盘子从a通过c 移动到b再将a最底下的盘子移动到 c之后再将 n-1个盘子从b通过a移动到c由此可得到 递归公式hanoi(int n,char from,char denpend_on,char to):{ //n:盘子数from:a,denpend_on:b,to:c //此语句意义为 将n个盘子从from 通过 denpend_on移动到tohanoi(n-1,from,to,denpend_on);move(n,from,to);

Python递归实现汉诺塔

Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1): print(x,'--->',z) else: f3(n-1,x,z,y) print(x,'--->',z) f3(n-1,y,x,z) n=int(input('请输入汉罗塔层数:')) f3(n,'X','Y','Z') 运行结果如下:

递归求汉诺塔的解

递归求汉诺塔的解 // 递归求汉诺塔的解.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> #include<conio.h> #include<windows.h> void HanoiTower(int,char,char,char); void main() { int n; char A='A',B='B',C='C'; printf("---Hanoi To

关于递归和汉诺塔

汉诺塔这个问题很经典,不清楚题目的同学可以去百度一下,在这小子就不多说了,进入正题: 让我们打开表格,看看这座塔: 这塔看起来不咋地对不对?不过,我们的目标是把它原封不动的搬到c列上,可以借助b列.让我们从最简单的做起:假设只有两层,从下往上分别是1,2,这时候你会说这题目简直就是在侮辱你的智商!只需要三步: First.将2从a列移到b列: Second.将1从a列移到c列: Finally.将2从b列移到c列: 很简单对不对?那现在,让我们做做完整版:64层!不要紧张,先试试将1之上的所有积

递归之汉诺塔

递归的定义: 一个函数自己直接或间接调用自己(一个函数调用另外 一个函数和他调用自己是一模一样的,都是那三步, 只不过在人看来有点诡异.) 递归满足的三个条件: 1.递归必须得有一个明确的终止条件 2.该函数处理的数据规模必须在递减 3.这个转化必须是可解的. 循环和递归: 理论上循环能解决的,肯定可以转化为递归,但是这个 过程是复杂的数学转化过程,递归能解决不一定能转化 为循环,我们初学者只要把经典的递归算法看懂就行, 至于有没有能力运用看个人. 递归: 易于理解 速度慢 存储空间大 循环 不

递归理解-汉诺塔问题

汉诺塔问题 汉诺塔问题的求解可以巧妙利用递归思想 以下摘自知乎上我认为阐述得很清除回答: 要用程序来解决这个问题,我们先定义一个移动函数:move(移动数,开始柱,中转柱,目标柱), 例如 move(2,A,B,C) 表示将2个盘子从A柱(开始柱)借助B柱(中转柱)移动到C柱(目标柱). 关于开始柱,中转柱,目标柱这三个概念可以用移动过程中的某个状态来理解, 看下面一张图应该就能明白: 有三种状态的柱子,开始柱,中间柱,目标住,开始柱指的是开始状态时存放所有盘子的柱子,中转柱指的是中间状态时暂时