今天又起雾了 发表于 2020-8-4 16:43:24

救命!!

还是汉诺塔,那天我以为我懂了,结果昨天睡不着想了一下,发现自己还是不懂。思路我知道,就是代码里面的实参和形参给我整懵了,求大佬救命呀。

def hanota(n,x,y,z):
    if n == 1:
      print(x,'--->',z)
    else:
      hanota(n-1,x,z,y)#将前n-1个盘子从x移到y上
      print(x,'-->',z)#将底下的最后一个盘子从x移到z
      hanota(n-1,y,x,z)#将y的n-1个盘子移到z上
hanota(3,"x","y","z")

为什么传入的是"x","y","z"
打印却没带""

sunrise085 发表于 2020-8-4 16:44:46

本帖最后由 sunrise085 于 2020-8-4 16:47 编辑

你调用的时候不写xyz,改成abc可能更好理解
hanota(3,"a","b","c")
用print打印字符串的时候,打印出来的效果是不会带外面的引号的

def hanota(n,x,y,z):
    if n == 1:
      print(x,'--->',z)#这里的x和z是变量
    else:
      hanota(n-1,x,z,y)#将前n-1个盘子从x移到y上
      print(x,'-->',z)#将底下的最后一个盘子从x移到z
      hanota(n-1,y,x,z)#将y的n-1个盘子移到z上
hanota(3,"x","y","z")#这里的"x" "y" "z"是字符串内容

wuqramy 发表于 2020-8-4 16:45:41

就是print字符串
一样的道理

51Arduino32 发表于 2020-8-4 16:59:04

{:10_277:}

☆·再睡℡①夏 发表于 2020-8-4 17:41:22

def hanol(n,a,b,c): # 这里的 a b c 就是形参,需要人为赋值的参数,可以理解为一个变量
    if n == 1:
      print(a,'->',c)

    else:
      hanol(n-1,a,c,b)
      print(a,'-->',c)
      hanol(n-1,b,a,c)

n = int(input('请输入汉诺塔的层数:'))
def hanol(n,a,b,c):
    if n == 1:
      print(a,'->',c)

    else:
      hanol(n-1,a,c,b)
      print(a,'-->',c)
      hanol(n-1,b,a,c)

n = int(input('请输入汉诺塔的层数:'))
hanol(n,'x','y','z') # 这里的 x y z 就是实参,可以理解成有实际意义的数值 或者 字符串之类的

# 之所以传入的是 'x' 'y' 'z' 但是最终打印的时候没带 ' ' 引号,是因为打印出来的是一个数值,而不是字符串。
# 如果想要连引号也打印出来的话可以如下
hanol(n,'"x"','"y"','"z"')# 在单引号中在加个双引号,或者在双引号内再加个单引号都行

今天又起雾了 发表于 2020-8-4 22:02:41

谢谢各位鱼友。知道自己的问题有多么蠢了

今天又起雾了 发表于 2020-8-4 22:17:33

sunrise085 发表于 2020-8-4 16:44
你调用的时候不写xyz,改成abc可能更好理解

用print打印字符串的时候,打印出来的效果是不会带外面的引 ...

def hanota(n,x,y,z):
    if n == 1:
      print(x,'--->',z)
    else:
      hanota(n-1,x,z,y)#将前n-1个盘子从x移到y上
      print(x,'-->',z)#将底下的最后一个盘子从x移到z
      hanota(n-1,y,x,z)#将y的n-1个盘子移到z上

      
>>> hanota(3,"a","b","c")
a ---> c
a --> b
c ---> b
a --> c
b ---> a
b --> c
a ---> c
首先谢谢各位鱼友回答我的帖子,我带入了"a","b","c"还是不明白形参和实参以下就是我的疑惑
第一hanota(n,x,y,z),函数首先是形参,传入hanota(3,"a","b","c")==(3,x="a",y="b",z="c"),调用函数传入实参。当运行到递归hanota(2,x,z,y)---为什么x=x z=y y=z?????是赋值了么
第二,假设赋值x=x z=y y=z    为什么递归这个时候hanota(1,x,z,y)又翻过来等于hanota(1,x,y,z)。。。
第三:第一次打印的时候print(x,'--->',z)这个z="c"呀
其实打了很多字,但是都删了。迷惑了----描述我都描述的不清楚。

sunrise085 发表于 2020-8-4 22:25:32

你的空间想象力不够,你的逻辑思维有待加强。
第一hanota(n,x,y,z),函数首先是形参,传入hanota(3,"a","b","c")==(3,x="a",y="b",z="c"),调用函数传入实参。当运行到递归hanota(2,x,z,y)---为什么x=x z=y y=z?????是赋值了么
第一次调用hanota(n,x,y,z),函数首先是形参,传入hanota(3,"a","b","c")==(3,x="a",y="b",z="c"),
在执行hanota的时候,遇到 hanota(n-1,x,z,y),你知道把 n-1,换成2,为什么不知道把xyz换成abc呢?
当运行到递归hanota(2,x,z,y)---为什么x=x z=y y=z?????是赋值了么
难道不应该是hanota(2,'a','c','b')吗?
页: [1]
查看完整版本: 救命!!