递归函数
函数在内部调用自身
如阶乘函数fanc(n)
def fanc(n):
if n==1:
return n
else:
return n*fanc(n-1)
优点:逻辑清晰,条理简单。所有的递归函数都可以用循环书写,但逻辑不如递归清晰。
缺点:递归是通过函数调用实现的。每进入一个函数调用,就增加一层栈。函数调用过多,会出现栈溢出。
解决方法:尾递归,栈的数目一定,就不会过多增加。但是大多编程语言没有此优化
优化:
def fact_iter(num, product):
if num == 1:
return product
return fact_iter(num - 1, num * product)
num-1,num*product事先已经计算好。