鱼C论坛

 找回密码
 立即注册
查看: 1549|回复: 8

求助:函数递归时,参数的位置变换问题(例题:汉诺塔)

[复制链接]
发表于 2020-7-31 23:06:15 | 显示全部楼层 |阅读模式

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

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

x
源代码如下:
def move(n, a, b, c):  #①
    if n == 1:
        print(a,'1--->', c)
    else:
        move(n-1, a, c, b)  #②
        print(a, '2--->', c)
        move(n-1, b, a, c)

move(3, 'A', 'B', 'C')

描述:
当参数传入时,参数的顺序是(n, a, b, c),也就是 ①处
执行到②处函数进行递归时,传入的参数顺序是(n, a, b, c),从②到①会重新对参数位置顺序排序吗?

内部的执行过程:
n = 3 ,a = 'A',  b = 'B',  c = 'C'

n = 2 ,a = 'A',  b = 'C',  c = 'B'

n = 1 ,a = 'A',  b = 'B',  c = 'C'

问题:
从n的值从2变到1的时候,后面b和c的参数变化不是很理解,求助大佬解答一下疑惑。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-31 23:12:00 | 显示全部楼层
不就是 b 和 c 调换了位置嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 23:15:18 | 显示全部楼层
求解加一,三层就把我绕晕了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-31 23:27:12 | 显示全部楼层
ngh888 发表于 2020-7-31 23:15
求解加一,三层就把我绕晕了

是的,第三层的参数位置变换把我绕晕了。我怎么理都理不清楚。先静一静,一会儿再理一下试试,看能不能自己理清楚。有大佬能来帮忙快速解答就更棒了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-31 23:34:42 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-7-31 23:12
不就是 b 和 c 调换了位置嘛?

我知道换了位置,就是这个第三层,怎么换的,有点晕。能解释一下吗?

n=2的时候,进行再次递归。
传入前,参数的顺序应该是(n=2,  a='A',  c='B',  b='C') --- a c b
传入后,参数的顺序应该是(n=2,  a='A',  b='C',  c='B')   --- a b c

n=1
传入前,参数的顺序是(n=1, a='A', c='C', b='B')  --- a c b
传入后,参数的顺序是(n=1, a='A', b='B', c='C')  --- a b c

是这样理解的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 23:48:43 | 显示全部楼层
超过光速c 发表于 2020-7-31 23:34
我知道换了位置,就是这个第三层,怎么换的,有点晕。能解释一下吗?

n=2的时候,进行再次递归。

什么叫 传入前 和 传入后 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-1 10:11:08 | 显示全部楼层
而且我还没看懂为啥会打印七次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-1 10:26:57 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-7-31 23:48
什么叫 传入前 和 传入后 ?

嗯……你看一下我上传的代码,我在后面备注了①和②的位置,它们的参数位置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-1 10:34:23 | 显示全部楼层
ngh888 发表于 2020-8-1 10:11
而且我还没看懂为啥会打印七次


呃呃,7次就是,最简的步骤呀。
把1和2当成整体,全都移到b柱上,然后把3移动到c柱上,再把b柱上的1和2全都移动到c柱上。
次数的公式的话就是: 2**n - 1(2的n次方 减 1 )
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 17:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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