递归(Recursion)
算法——递归
递归(Recursion):只是让解决方案更清晰,并没有性能上的优势。
基线条件(base case):函数停止调用自己,避免无限循环
递归条件(recursive case):函数调用自己
栈(stack):压入(push)和弹出(pop),FILO(Fist In Last Out),后进先出
调用栈(call stack):可能很长,将占用大量内存
# recursion 递归
def countdown(i):
print(i)
if i <= 0: # 基线条件(base case)
return
else:
countdown(i-1) # 递归条件(recursive case)
def fact(x): # call stack 调用栈
if x == 1:
return 1
else:
return x * fact(x-1)
def fibonacci(end, x=1, y=1):
if end < x: # base case
return []
else: # recursive case
return [x] + fibonacci(end, y, x+y)
if __name__ == '__main__':
countdown(5)
print(fact(5))
print(fibonacci(120))