Python中的递归函数详解及其示例代码
什么是递归函数?
递归函数是调用自己的一个函数。如果一个函数在内部调用自己本身,这个函数就是递归函数。
递归函数通常需要一个基本结束条件和一个递归条件。
递归条件是指函数调用自身的条件,如果满足递归条件就会继续调用自身;基本结束条件是指函数不在递归调用自身,函数执行结束。
递归函数的三个特点:
1、一个问题的解可以分解为几个子问题的解。
2、这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样。
3、存在递归终止条件。
递归函数的优点:
1、代码简洁,易读
2、代码结构清晰
3、适合处理树形结构
递归函数的缺点:
1、性能较差
2、堆栈溢出
Python实现递归函数:
递归函数的实现分为两个部分:
1、编写递归终止条件的代码
2、编写递归调用的代码
递归终止条件是指当我们需要结束函数的调用时,需要编写的代码。递归调用的代码则是指在函数体中,会再次调用自身的代码。
下面,我们来看几个Python实现递归函数的例子。
求阶乘:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
print(factorial(5))
在这个函数中,递归的终止条件是当n等于1时,函数返回1。当n不等于1时,函数会计算n乘以factorial(n-1),其中factorial(n-1)就是递归调用的函数。
该函数的输出结果为:120。
求斐波那契数列的第n项:
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n-1) + fib(n-2)
print(fib(6))
这个函数的递归终止条件是n等于1或n等于2时,函数返回1。当n不等于1或2时,函数会计算fib(n-1)和fib(n-2)的和,其中fib(n-1)和fib(n-2)就是递归调用的函数。
该函数的输出结果为:8。
求汉诺塔问题的步骤:
def hanoi(n,A,B,C):
if n == 1:
print(A,'-->',C)
else:
hanoi(n-1,A,C,B) #将前n-1个盘子从A移动到B上
print(A,'-->',C) #将A上面的最后一个盘子移动到C上
hanoi(n-1,B,A,C) #将B上的n-1个盘子移动到C上
hanoi(3,'A','B','C')
在这个函数中,递归终止条件是当n等于1时,函数会输出A到C的移动顺序。当n不等于1时,函数会将前n-1个盘子从A移动到B上,将A上面的最后一个盘子移动到C上,以及将B上的n-1个盘子移动到C上。其中,移动前n-1个盘子的代码和移动后n-1个盘子的代码就是递归调用的函数。
该函数的输出结果为:
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
在编写递归函数时,需要开发者准确地掌握问题和递归函数的思路,以便实现正确的递归代码。同时,需要注意递归过程中的堆栈溢出问题,以及递归函数的性能问题。
