递归函数
(1)什么是递归函数?
我们都知道,一个函数可以调用其他函数。如果这个函数在内部调用它自己,那么这个函数就叫递归函数。
(2)递归函数的作用
举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n
1 #不使用递归的方法:
2 n=4 #求4的阶乘
3 result=1
4 i=1
5 while i<=4:
6 result=result*i
7 i+=1
8
9 print(result)
10
11 #使用递归的方法:
12 def test1(n):#定义函数来计算数字n的阶乘
13 if n==1:
14 return 1
15 return n * test1(n-1)
16
17 print(test1(5))
18 #1在函数的内部调用自己本身
19 #2递归函数本质是一个方法的循环调用,注意:有可能出现死循环
20 #3一定要定义递归的边界(什么时候退出循环)
输出结果为:
1 24
2 120
3 [Finished in 0.4s]
从上面两中方法的对比可以看出,递归函数的作用和循环的方法效果一样,即递归函数本质上是一个方法的循环调用,注意:有可能会出现死循环。因此,使用递归函数时,一定要定义递归的边界(即什么时候退出循环)。
递归函数的另一个案例是斐波纳契数列。
斐波纳契数列:1,1,2,3,5,8,13。。。(该数列中,有n个数字,从第三个数字开始:数值 =前一个数字 + 前面一个数字)
即,n=(n-2)+(n-1)
1 def get_num(n):#获取斐波拉契数列中第n个数字的值
2 if n==1 or n==2:
3 return 1
4 return get_num(n-1) + get_num(n-2)
5
6 #把获取的斐波拉契数字存放到列表中
7 nums=[]
8 for i in range(1,21):
9 nums.append(get_num(i))#get_num获得一个斐波拉契数字
10
11 print(nums)
输出结果为:
1 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
2 [Finished in 0.4s]
以上两个案例是递归函数的经典案例,需要记住其使用方法。注意:在实际使用中,递归函数由于消耗时间比较长(相比for循环和while循环),所以很少使用。