我对Python完全陌生,目前正在阅读有关河内塔和递归的教程。我以为我理解递归,直到他们给出了这个例子:
def moveTower(height,fromPole, toPole, withPole):
if height >= 1:
moveTower(height-1,fromPole,withPole,toPole)
moveDisk(fromPole,toPole)
moveTower(height-1,withPole,toPole,fromPole)
#print(withPole)
def moveDisk(fp,tp):
print("moving disk from",fp,"to",tp)
moveTower(3,"A","B","C")
Run Code Online (Sandbox Code Playgroud)
它用3张光盘打印出解决河内塔问题的正确举动:从A到B的移动磁盘从A到C的移动磁盘从B到C的移动磁盘从A到B的移动磁盘从C到A的移动磁盘从C的移动磁盘到B将磁盘从A移到B
我的问题是,它是怎么做到的?有人可以遍历代码行,以便我了解它如何打印正确的动作吗?我主要是混淆怎样的价值fp,并tp可以从改变A到B到C。抱歉,这是一个广泛的问题!任何帮助将不胜感激!
我正在查看递归的阶乘示例,并且只是想确保我正确理解它!
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
Run Code Online (Sandbox Code Playgroud)
我是否正确地说:
阶乘(4)=阶乘(4-1)*4 =阶乘(3-1)*3*4 =阶乘(2-1)*2*3*4 =阶乘(1-1)*1*2*3*4 = 24
因为阶乘(1-1)=阶乘(0),其作为基本情况显示= 1然后我们乘以2,然后乘以3然后乘以4.
这是看待它的正确方法吗?
提前致谢!
目前在codecademy上做一个递归教程.它告诉我,我是对的,可以进入下一课,但也提出:
File "python", line 6
else:
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
显然这是不对的!你能看看这个链接并告诉我什么了吗?!我很困惑!
http://www.codecademy.com/courses/python-intermediate-en-7f7dx/0/2#
如果我的代码没有出现,它是:
def timesTwo(n):
if(n == 0):
return '2 x 0 = 0'
n*2
else:
return timesTwo(n-1) + 2
Run Code Online (Sandbox Code Playgroud)
多谢你们