python基础007----递归函数&闭包&装饰器

发布时间 2023-12-22 21:26:37作者: 搁浅的青木儿

一、递归函数

1、递归函数概念

      直接或间接的调用自身的函数,称为递归函数。每调用一次自身,相当于复制一份该函数,只不过参数有变化,参数的变化,就是重要的结束条件。

2、递归函数实例

#####递归函数####
##1、普通实现:计算n!=1*2*3*4*5*6*...*n
n=int(input('普通实现阶乘,请输入n的值:'))
result=1
i=1
while i<=n:
    result=result*i
    i+=1
print('普通实现阶乘的结果是:',result)

##2、递归实现:计算n!=1*2*3*4*5*6*...*n
def test(n):
    if n==1:
        return 1
    return n*test(n-1)     #递归调用函数本身
while True:
    n=int(input('递归实现阶乘,请输入n的值:'))
    print('递归实现阶乘的结果是:',test(n))
    if n>50:
        break

#3、普通实现输出斐波那契数列
def feibo(n):
    a,b=0,1
    c=[]
    while n>0:
        c.append(b)
        a,b=b,a+b
        n-=1
    print(c)
feibo(int(input('普通实现---请输入要输出数列的个数:')))
#4、递归实现输出斐波那契数列
def feibo1(n):
    if n<=1:
        return n
    elif n==2:
        return 1
    return (feibo1(n-1)+feibo1(n-2))
n=int(input('递归实现---请输入要输出数列的个数:'))
a=[feibo1(i) for i in range(1,n+1)]
print(a)

 

 

 

 

 

  

二、闭包

 1、闭包的定义

      

 

 

 2、代码实例

#####闭包#####
def outer(num):               #外部函数,num为外函数的临时变量
    def inner(num_in):        #内部函数,若要在内部函数中修改外部函数的临时变量num,可以用nonlocal关键字声明一个变量num, 表示这个变量不是局部变量空间的变量,需要向上一层变量空间找这个变量
        print('inner函数的局部变量--num_in is %d'%num_in)
        return num+num_in     #在内部函数中用到了外函数的临时变量num
    return inner              #外函数的返回值是内函数的引用
a=outer(20)                   #调用外函数传入参数,并创建内函数,并把内函数的引用返回给了a
#a(200)==inner(200)           #a存储了外函数的返回值,也就是内函数的引用a(200)相当于inner(200),即:num_in=200
print('返回内外部函数的计算结果:',a(200))

 

三、装饰器