函数的应用

函数的引用

如果函数收到的是一个可变对象(比如字典或列表)的引用,就能够修改对象的原始值------=相当于通过"传引用"来传递对象
如果函数收到的时一个不可变对象(如数字 字符或 元组)的引用,就不能直接修改原始对象----相当于"传值"来传递对象
函数的引用:
        如函数名引用 函数传递时的引用传递
def test1():
    print('___________')
#test1()     # 调用函数
res = test1   # 可理解为变量的赋值 引用函数名
print(id(res))
print(id(test1))
res()

res 和 test1引用同一对象 

递归函数

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

1.前n项和

def funb(n):
    if n>=0:
        return funb(n-1)+n      # funb(n-1)表示前n-1项的和
    else:
        return 0
print(funb(3))
递归过程
f(3)
=f(2)+3
=f(1)+2+3
f(0)+1+2+3    要f(0)设置一个初始值 f(0)=0
回溯
# =0+1+2+3
# =1+2+3
# =3+3
# =6

2.斐波那契数列

用递归函数求斐波那契序列1,1,2,3,5,8....
思路:
1)看题找规律1+1=2,1+2=3,2+3=5 3+5=8
2)得到规律 后面一项的值=前面俩项的和
list1=[]
def funa(n):
    if n<=1:
        return n
    else:
        return funa(n-1)+funa(n-2)

# 调用 前20项
for i in range(1,21):
    list1.append(funa(i))  # 添加第i项,完成上面函数的调用
print(list1)
递推:给递归实现拆解,递归每一次都是基于上一次进行下一次的执行
回溯:遇到终止条件之前,从最后往回反,一级一级的把值返回来

3.回调函数

def test3(m,n):
    if m==2:
        n()
    else:
        print("不可调用")
def one():
    print("函数一")
def two():
    print("函数二")

test3(2,two)

将第三个函数作为第一个函数的参数传进去

在一个函数内进行调用(此方法可以做一个触发器)

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷酷的小啊帅呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值