1.什么是递归函数?在一个函数内部,可以调用其他函数。如果函数在内部调用自身,则该函数是递归的。2.函数的递归调用原理其实递归函数是在栈内存上递归执行的,每次递归执行都会消耗一些栈内存。栈内存的大小是限制递归深度的重要因素三、案例分析1、求阶乘计算阶乘n!=1x2x3x...xn,可用函数fact(n)表示。fact(n)=n!=1x2x3x...x(n-1)xn=(n-1)!xn=fact(n-1)xnfact(n)可以表示为nxfact(n-1),只有n=1需要特殊处理。所以fact(n)递归写成:deffact(n):ifn==1:return1returnn*fact(n-1)如果计算fact(6),根据函数定义可以看到计算过程如下:deffac(n):ifn==1:return1else:res=n*fac(n-1)returnresprint(fac(6))运行结果:2。斐波那契数列有这样一个数列:1,1,2,3,5,8,13,21,34……它的第一个和第二个元素等于1,它的其他元素等于它前面两个元素的和。例子:deffab(n):#DefineFibonacciseriesifnin[1,2]:#Ifn=1or2return1returnfab(n-1)+fab(n-2)#n>2print(fab(1))#第一个斐波那契数列的元素print(fab(2))#斐波那契数列的第二个元素print(fab(8))#斐波那契数列的第8个元素print(fab(13))#斐波那契数列的第9个元素运行结果:3、递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环,但是循环的逻辑不如递归清晰。递归需要注意递归的深度。由于递归会产生多次函数调用,而函数调用会消耗代码的栈空间,如果递归深度过大,会造成栈溢出。以上面的阶乘为例,如果计算100000的阶乘,在一般机器上都会出现栈溢出的问题。print(fac(10000))如下:4.总结本文基于Python基础。Python标准解释器并未针对尾递归进行优化,任何递归函数都会出现堆栈溢出。介绍了使用递归函数的优缺点。优点是逻辑简单明了,缺点是调用太深会导致栈溢出。在实际情况下,针对尾递归优化的语言可以通过尾递归来防止堆栈溢出。其实尾递归就相当于循环。没有循环语句的编程语言只能通过尾递归实现循环,后面会详细讲解。使用Python语言,希望能帮助大家更好的学习。
