鱼C论坛

 找回密码
 立即注册
查看: 1820|回复: 3

[已解决]汉诺塔游戏代码求助

[复制链接]
发表于 2020-11-18 11:36:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def hanoi(n,x,y,z):##1.这里逻辑能够搞懂 但是函数的设置搞不太懂 n,x,y,z分别是什么类型的参数??
    if n == 1:
        print(x,'-->',z)

    else:
        hanoi(n-1,x,z,y) ##先把n-1个从x移到y,在这里位置参数z给了y,原来的z变成了辅助柱子
        print(x,'->',z)  ##把x移动到z
        hanoi(n-1,y,x,z)##把y上的n-1个移动到z上,那么y就看做第一个位置

n = int(input('请输入:'))
print(hanoi(n,'X','Y','Z')) ##2.这里的'X','Y','Z'又是什么类型的参数,是赋值给了x,y,z 嘛??
        

def kk(x,y):
        print(kk('Y','X'))

       
>>> kk(x,y)
Traceback (most recent call last):         ##3.请问这里为什么会报错
  File "<pyshell#266>", line 1, in <module>
    kk(x,y)
NameError: name 'x' is not defined


最佳答案
2020-11-18 13:04:20
1.四个参数(汉诺塔层数,起始位置,中间位置,结束位置)
只有n是整型,剩下的三个参数可以是任意类型,只要他能表示三根柱子就可以了。
2.这里是赋值给了x,y,z,也就是x='x',y='y',z='z',拿这三个字母来代表这三根柱子。你要是不喜欢的话可以hanoi(n,1,2,3) 这样是拿整型来表示三根柱子
3.报错的原因有两条,首先x没有赋值,其次超过了递归的最大深度。也就是说,你传入一个参数的话会一直递归,像两面面对面的镜子,没有尽头

你需要学习一下实参和形参的区别,这样能加深你对参数的理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-18 12:00:11 | 显示全部楼层
或者有没有老哥给讲一讲这个参数之间的对应关系 搞不太懂这里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 12:52:10 | 显示全部楼层
def hanoi(n,x,y,z)中的参数是形参,可以理解为数学的X,没有实际的值,通过别人赋值后才有意义。相当于变量。
‘X’,'Y','Z'是字符类型,传递进了hanoi函数中
x和y没有定义,就算定义了,你这函数也是无限递归,还是报错
从头开始学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 13:04:20 | 显示全部楼层    本楼为最佳答案   
1.四个参数(汉诺塔层数,起始位置,中间位置,结束位置)
只有n是整型,剩下的三个参数可以是任意类型,只要他能表示三根柱子就可以了。
2.这里是赋值给了x,y,z,也就是x='x',y='y',z='z',拿这三个字母来代表这三根柱子。你要是不喜欢的话可以hanoi(n,1,2,3) 这样是拿整型来表示三根柱子
3.报错的原因有两条,首先x没有赋值,其次超过了递归的最大深度。也就是说,你传入一个参数的话会一直递归,像两面面对面的镜子,没有尽头

你需要学习一下实参和形参的区别,这样能加深你对参数的理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 21:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表