kcjf.net
当前位置:首页 >> 汉诺塔 python代码流程 >>

汉诺塔 python代码流程

有a,b,c 三个柱子,有n个从大到小的盘子,大盘子必须一直放在小盘子的下面,借助柱子b将n个盘子从a移到c 这个问题可以分解成下面的子题 先借助柱子c,将n-1个盘子从a移到b: hanoi(n-1,a,c,b) 将第n个盘子从a移到c :print(a,'-->',c) 然后借柱子 a将已经移致b上的n-1个盘子移到c上:hanoi(n-1,b,a,c) 这样就移好了,将原问题分解成规模更小同样的子问题,递归解决,

报错意思是变量n没有被定义.你把层数传给hanoi了.把hanoi=(int(input('请输入汉诺塔层数')))里的hanoi改为n就行了,其他不用改

以下是汉诺塔的标准子程序 以及调用方法.供参考.# coding:UTF-8 def hanoi(n,x,y,z): if n==1: print(x,'-->',z) else: hanoi(n-1,x,z,y) # 将前n-1个盘子从x移动到y上 print(x,'-->',z) # 将最底下的最后一个盘子从x移动到z上 hanoi(n-1,y,x,z) # 将y上的n-1个盘子从y移动到z上 hanoi(4,'x','y','z')

围绕abc.展开首先如果n=1直接输出abc,反之按照567步骤直至n=1进入n=1那一步骤输出abc如果567都没有n=1那么进入步骤8结束运算,高中就应该学过

当n等于3的时候你就假设.前面的问题都已经解决.只需把最后一片移动到目标位置上去.这就是递归调用.

hanoi(3, 'A', 'B', 'C')=> hanoi(2, 'A', 'C', 'B')=> hanoi(1, 'A', 'B', 'C')=>注意这个y和z是换了一下的,再调一次还要换一下

递归方法有些时候是不太好理解,不过递归的意义就是把解决问题n变成解决n-1的问题,最终变成解决1个问题.假设有n个盘子,从上到下依次编号,最下面的盘子编号是大写的n.托盘分别是x,y,z.要把所有盘子从x移动到z.前面几行代码就不解释了,很容易理解.第五行,如果只有一个盘子,就直接从x移动到z.第七行,如果不只一个盘子,先把上面n-1个盘子从x移动到y.第八行,再把n号盘子从x移动到z.第九行,再把刚才那n-1个盘子从y移动到z.至于那n-1个盘子是怎么移动的,再次调用这个函数,把问题变成n-2个盘子加1个盘子的问题.

这是Python3系统自带的一个例子,估计就是这个意思,本来他是6个盘子,按照你要求改成4个了.递归算法没问题,描述也非常详细 ;)#!/usr/bin/env python3 from turtle import * class Disc(Turtle): def __init__(self, n): Turtle.__init__(self,

汉诺塔#include int yd(char a,char b,char c,int n){static int t=0; if (n==2){printf("%c->%c\n%c->%c\n%c->%c\n",a,c,a,b,c,b);t=t+3;} else { yd(a,c,b,n-1); printf("%c->%c\n",a,b); t++; yd(c,b,a,n-1); } return t;}main(){ int n; scanf("%d",&n);printf("%d",yd('a','b','c',n));} a.b.c是三个塔,运行后输入a塔上初始的块数.

把每次移动操作 独立出来,写成move操作 然后吧每次移动的逻辑写成hanoi,然后加上重复 hanoi里面执行hanoi、就是递归了

qwfc.net | nmmz.net | zxqk.net | ldyk.net | eonnetwork.net | 网站首页 | 网站地图
All rights reserved Powered by www.kcjf.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com