学习网址
递归函数
递归函数调用是通过栈这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。解决递归调用栈溢出的方法是通过尾递归优化。(尾递归优化:retrun只调用自身函数,不包含表达式)
遗憾的是,大多数编程语言没有针对尾递归做优化,Python解释器也没有做优化,所以,即使把上面的函数改成尾递归方式,也会导致栈溢出。
练习一:n的阶层
#方法一
def ClassN(n):
if n == 0 or n == 1:
return 1
else:
return n*ClassN(n-1)
#方法二 initial=1
ef fact_item(n, initial):
if n == 0 or n ==1:
return initial
return fact_item(n-1, n*initial)
练习二:斐波拉契数列
#方法一
def Fibonacci(number