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函数的递归举例,巧用递归,可以让很多复杂的问题简单化。