递归函数
使用递归函数要防止栈的溢出,函数调用是通过栈这种数据结构来实现的,没进入一个函数,就会多一层栈帧,每执行完一个函数(或者可理解为函数返回),就会减少一个栈帧。但栈不是无限大的,当递归调用太多会导致栈溢出。
解决栈溢出的方法:尾递归。
尾递归是指在函数返回时调用其本身而不是表达式。
尾递归是指在函数返回时调用其本身而不是表达式。
使用尾递归,编译器和解释器会进行优化, 栈内只有一帧。
循环可看做特殊的尾递归。
但较遗憾的是,Python解释器并未对尾递归进行优化,任何递归函数都有可能造成栈溢出。