基线条件、递归条件
基线条件:函数不再调用自身,避免死循环【即限制条件】
递归条件:函数调用自身
栈
执行函数中途调用另一个函数时,当前函数暂停并处于未完成状态
栈:先进后出【装箱,最晚放进来的最早拿出去】
使用方便,但存储详尽信息可能占用大量内存,每次函数调用都需占用内存,当n越大,程序运行效率越低。
解决:1循环 2尾递归
尾递归
例:阶乘
递归:建新栈
尾递归:不建新栈,直接覆盖,占用恒量内存,大大节省栈空间,提升运行效率
#递归
def rec(n):
if n == 1:
return n
else:
return n + rec(n - 1)
#尾递归
def tailrec(n, total = 1):
if n == 1:
return total
else:
return tailrec(n -1, total * n)
#迭代
total = 1
for i in range(2, n):
total = total * i