Python学习_递归函数&函数引用

递归函数

传递回归到原来的地方
如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。

递归函数的特性:
1)必须有一个明确的结束条件;
2)每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3)相邻两次重复之前有紧密的联系,前一次要为后一次做准备;
4)递归效率不高,递归层次过多会导致栈溢出
5)优点:定义简单,逻辑清晰

递推:给递归实现拆解,递归每一次都是基于上一次进行下一次的执行
回溯:遇到终止条件之前,从最后往回返,-级一级的把值返回来
# 用函数
def funa(n):
    sum=0
    for i in range(1,n+1):
        sum+=i
    print(sum)
funa(3)
# 递归函数
def funb(n):   # funb(n)表示n项的和
# n必须设置处置初始值,否则会造成栈溢出
    if n>0:
        return funb(n-1)+n
    else:
        return 0
print(funb(3))
# 用递归函数求斐波那契函数序列 1,1,2,3,5,8…·…·
# 思路:
# 看题找规律1+1=2 1+2=3 2+3=5 3+5=8
# 得到规律后面一项的值=前面两项的和
# 定义一个函数,求第n项。funa(n)
# 最后求得整个序列,先定义一个空的列表list1 ,用append把符合条件的数据添加到序列中
list1=[]
def fun(n):
    if n<=1:
        return n
    else:
        return fun(n-1)+fun(n-2)
for i in range(1,11): # 循环10次
    list1.append(fun(i))
print(list1)

函数引用

在这里插入图片描述
相同数据使用同一个空间存储,节约内存的占用
在这里插入图片描述
对象引用本质是对象身份(存储对象的内存地址)的具体表示。函数的引用:如对函数名的引用、参数的传递引用。

函数的引用
如果函数收到的是一个可变对象(比如字典或列表)的引用,就能够修改对象的原始值---相当于通过“传引用”来传递对象;
如果函数收到的是一个不可变对象(如数字字符或元组)的引用,就不能直接修改原始对象--相当于“传值”来传递对象;
函数的引用:如函数名的引用函数传递时的引用传递

def test():
    print('---in test fun---')
test()  # 调用函数
res=test # 可理解为变量赋值 引用函数名
print(id(res))
print(id(test))

在这里插入图片描述

def test():
    print('---in test fun---')
test()  # 调用函数
res=test # 可理解为变量赋值 引用函数名
# print(id(res))
# print(id(test))
res()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值