- 说实话直到最近,有时候写递归脑子还是会卡住。
- 然后昨天顺手就把一个可以用递归表达的函数,直接写成了 while,好像也运行顺利。
- 我就在想,是否 while 可以替代递归,把递归每次返回的值赋给变量。
- 下面举两个简短的例子。
def fact(n):
if n == 1:
print('fact: 1 = 1')
return 1
print(f'fact: {n} = {n}*fact({n-1})')
return n * fact(n - 1)
print(fact(10))
- 在递归时,运行顺序是从外到内从,有点反过来的。
def fact2(n):
r = a = 1
while True: # 退出条件写在下面感觉更易读一点
r *= a
print(f'a={a} | r={r}')
a += 1
if a > n:
return r
print(fact2(10))
- 用 while 写起来和理解起来都比较顺一点。
- 我是美术半路出家的,现在就有点疑惑。
- 想请教下各位高手,哪些情况下不适用 while 必须递归。
- 或者递归有啥特别的优势嘛?