递归函数的定义和几个小例子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归函数的定义和几个小例子相关的知识,希望对你有一定的参考价值。

递归函数

(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循环),所以很少使用。

 

以上是关于递归函数的定义和几个小例子的主要内容,如果未能解决你的问题,请参考以下文章

vue递归组件的一些理解

函数式编程的几个小例子

runtime的几个小例子(含Demo)

Runtime的几个小例子(含Demo)

使 PHP 代码更加简洁的几个小技巧

匿名函数和几个和匿名函数相互合作