为了账号安全,请及时绑定邮箱和手机立即绑定

不明白move(n-1, b, a, c)?还有,为什么要调换a,b,c的位置?

不明白move(n-1, b, a, c)?还有,为什么要调换a,b,c的位置?

老茧 2016-01-15 10:19:56
def move(n, a, b, c):     if n ==1:         print a, '-->', c         return     move(n-1, a, c, b)     print a, '-->', c     move(n-1, b, a, c) move(4, 'A', 'B', 'C')最后这一行代码 move(n-1, b, a, c)是什么意思?还有就是a,b,c  a,c,b   b,a,c  为什么顺序会换?谢谢!!!
查看完整描述

2 回答

?
清波

TA贡献165条经验 获得超90个赞

这个就是 函数的参数方面的问题了。 

最著名的形式参数(形参),实际参数(实参)的区别:

def func (a, b):
    print(a, b)
    func1(b, a)
    
def func1(x, y):
    print (x, y)
    
## 定义了两个函数 func 和func1 其中, 定义是所用的 a, b, x, y 都是形参, 而调用时传给函数的参数就是 实参了

func(1, 2)
## 输出
1 2
2 1

## 解释, 调用 func(1, 2) 这个1 和 2  就是实参。 同样 在 func() 函数中,我们调用了 func1(b,a) 这里面的 b 和
## a 就是实参了 在这里是 2 和1 。

嗯, 形参和实参的 转换, 基本就是在 函数定义的内部 再次调用函数(如果是其本身 被称为递归调用)的时候。

上面的 汉诺塔递归 就是这种 每次调用 都在做 形参和实参的转换。

查看完整回答
反对 回复 2016-05-09
?
萧沐123

TA贡献2条经验 获得超1个赞

这是一种递归调用,move(n-1, a, c, b)是为了将之前的n-1个先放到b上,当这部完成后,move(n-1, b, a, c)则就是将之前已经放到b上的那n-1个再放回到c上,这里的abc都是形式参数,abc顺序的转换就是将不同的值传入递归函数中使其能够执行转换,楼主可以先从3个的汉诺塔开始,按程序一点点的走,更便于理解递归

查看完整回答
反对 回复 2016-05-08
  • 2 回答
  • 1 关注
  • 3636 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信