通过例子来理解python函数递归的用法

发布日期: 2020-07-24

浏览量: 10825

1、函数的声明

我们都知道,函数的声明语法如下。

def 函数名:
    函数体;

其中,函数体就是函数要实现的具体功能,如果函数需要返回,可使用return语句来返回。

2、在函数体中调用其它函数

在如下的例子中,分别声明了两个函数,即function_1和function_2,其中在function2函数中调用了函数function_1,这在语法上是完全Ok的;这时如果调用function_2,会间接地调用function_1,最终返回100。

def function_1():
    return 100
def function_2():
    return function_1()

3、在函数体中调用函数自己

函数内部可以调用其他函数,当然在函数内部也可以调用自己,在函数内部调用自己就叫着函数的递归。下面通过一个例子来说明:

#声明function_3函数
def function_3(n):
   if n==1:
       return 1
   return n*function_3(n-1)
#调用function_3
print(function_3(5))     #传如5,返回120

说明:在传入实参5调用函数function_3时,返回值是5*function_3(4),其中function_3(4)又等于4*function_3(3),其中function_3(3)又等于3*function_3(2)。其中function_3(2)又等于2*function_3(1),即2*1,所以最终结果是5*4*3*2*1=120。在这个例子中我们通过函数的递归实现了阶乘运算。

注意这里有非常关键的一点:函数内部的代码是相同的,只是针对参数不同,处理的结果不同,当参数满足一个条件时,函数不再执行。这个非常重要,通常被称为递归的出口,否则会出现死循环。

同理,我们可以通过递归实现求和运算,声明一个函数,传入参数n,返回1+2+...+n的和。

def function_4(n):
    if n==1:
        return 1
    return n+function_4(n-1)
#调用function_4函数
function_4(5)        #返回15

另外,函数的递归在实现多维列表或元组的运算时,也非常便利,比如如下函数实现取出列表中的所有数字,并返回一个新的列表。

def get_num(*args):
    for i in args:
        print(type(i))
        global list2
        if type(i)==int:
            print("i:",i)
            list2.append(i)
            print("list2:",list2)
        elif type(i)==list or type(i)==tuple:
            get_num(*i)
    return list2
#调用函数get_num
list1=[[3,5,8],10,[[13,"hello",14,],15,18],20,(300,700)]
get_num(*list1)        #返回:[3, 5, 8, 10, 13, 14, 15, 18, 20, 300, 700]

以上就是python函数的递归举例,巧用递归,可以让很多复杂的问题简单化。


关注我们
值得信赖的IT教育机构

值得信赖的IT培训机构

成都校区地址:成都市高新区天府二街蜀都中心1期1号楼 西安校区地址:西安市经开区凤城九路海博广场B座 深圳校区地址:深圳市福田区彩田南路深圳青年大厦

蓉华教育,行胜于言,IT培训机构口碑选择(蜀ICP备20007585号-1 )

版权所有 © 成都蓉华软创科技有限公司 2016-2020

微信咨询

微信咨询

联系电话

联系方式

173-5852-6576