关于参数位置的问题
代码小白,也许是白痴问题,请勿笑
假设n初始值为2,结果为A-->B,A-->C,B-->C
第一次循环,到内层第一个move处,n变为n-1即1,所以在此处应输出if中的print,但因为move中b、c交换了位置,使得本应输出的A-->C变成了A-->B,是不是意味着if中的参数a、b只代表最外层move中形参的位置,而不是具体的某个参数?
内层move中参数交换到底是一个什么意义的操作?
代码小白,也许是白痴问题,请勿笑
假设n初始值为2,结果为A-->B,A-->C,B-->C
第一次循环,到内层第一个move处,n变为n-1即1,所以在此处应输出if中的print,但因为move中b、c交换了位置,使得本应输出的A-->C变成了A-->B,是不是意味着if中的参数a、b只代表最外层move中形参的位置,而不是具体的某个参数?
内层move中参数交换到底是一个什么意义的操作?
2017-07-23
我来把整段代码解释一下吧!希望能解决你的问题。
def move(n, a, b, c): #定义一个函数(由下面代码的“a, '-->', c”可以看出,该函数的最终目的是要将a柱中的n个盘子全部移动到c柱中)。
if n==1:
print a,'-->',c #只有一个盘子时,只需将其从a柱移动到c柱,一步到位。
return
move(n-1,a,c,b) #这一行代码可以理解成是在继续定义函数,可以看出,与原始函数相比较,b与c的位置互换了,表示将a柱中的n-1个盘子移动到b柱中,b柱中就总共有n-1个盘子。那么,a柱中就只剩下最下面一个盘子了。
print a,'-->',c #然后一步是,将a柱中的盘子即剩下的最下面那个盘子移动到c柱中。
move (n-1,b,a,c) #接着定义函数,可以看出,与原始函数相比较,a与b的位置互换了,表示将b柱中的n-1个盘子(b柱中总共n-1个盘子)全部移动到c盘中。
move(4, 'A', 'B', 'C') #输出利用‘B’这个中转站将‘A’中的4个元素按顺序替换到'C'中的结果。
再提个醒哦:move()代表的是一个函数,“因为move中b、c交换了位置,使得本应输出的A-->C变成了A-->B”这种理解欠妥哦, move(n, a, b, c)这行代码即表示将a柱中的n个盘子全部移动到c柱中(包含所要进行的所有步骤),而move(n-1,a,c,b)这行代码表示的是将a柱中的n-1个盘子移动到b柱中(包含所要进行的所有步骤),而move(n-1,a,c,b)与下面的那行代码 print a,'-->',c是分开的,print a, '-->', c 始终表示将a柱中的盘子移动到c盘中。
对的,你的理解是正确的。我再帮你清晰一点,就先比如你说的n=2,在外层中,也就是move(2,A,B,C)中a=A,b=B,c=C,然后在这一层,先运行move(1,a,c,b),这里是进入到了第二层,它对应的a=A,b=C,c=B,因为n=1了,所以,它就执行a-->c,也就是A-->C,此时第二层执行完了,返回上一层,注意,每一层对应的是实参是什么,计算机会贮存起来,返回来就对应执行,所以返回到外层了,对应的abc就是a=A,b=B,c=C,所以执行下一步的print a-->c 就是A-->C 了。然后下面move(1,b,a,c)同理。
所以参数交换的意义就是在于对应print a-->c这个语句。
举报