python 函数的递归_Python-函数递归

一、函数递归

引入

函数的递归调用:就是在调用一个函数的过程中又直接或间接地调用自己

示例1:直接调用自己

def foo():

print('hello')

foo()

foo() # 无限递归,会抛出异常,调用python对象超过最大递归深度

示例2:间接调用自己

def bar():

print('from bar')

foo()

def foo():

print('hello')

bar()

foo() # 也会抛出异常

为何无限递归吧会抛出异常???

因为无限的递归会导致内存溢出,所以python设定了最大的递归层数,我们应该给递归设置结束条件,然后返回

import sys

print(sys.getrecursionlimit()) # 可查看当前最大递归层数

print(sys.setrecursionlimit(2000)) # 可设置新的最高递归层数

递归调用

应该分为两个阶段

①、回溯(挖井) :一层一层地递归调用下去

②、递推(从井里往外跳):在满足某一条件的情况下结束回溯,然后开始向上一层层返回

小案例:计算年龄,小一说比小二多大十岁,小二比小三大十岁,小三比小四大十岁,小四比小五大十岁。

salary(5) = salary(4) + 10

salary(4) = salary(3) + 10

salary(3) = salary(2) + 10

salary(2) = salary(1) + 10

salary(1) = 18

'''递归书写思路'''

n=1 salary(n) = 18

n!=1 salary(n) = salary(n-1) + 10

'''递归使用:'''

def salary(n):

if n == 1:

return 18

return salary(n-1) + 10

res=salary(5)

print(res)

二分法使用场景

关于算法的相关了解与学习笔记可查看本博客另一专题《算法》

'''

从小到大排列的一个数字列表,找某个数是否在其中,此处采用算法的方式,不使用python自带的in方法

'''

nums = [11, 13, 32, 47, 53, 73, 84, 91,101,111,222,333,444,5555]

def binary_search(l,find_num):

print(l)

if len(l) == 0:

print('find_num not exists')

return

mid_index = len(l) // 2

if find_num > l[mid_index]:

right_l=l[mid_index+1:]

binary_search(right_l,find_num)

elif find_num < l[mid_index]:

left_l=l[:mid_index]

binary_search(left_l,find_num)

else:

print('find it')

binary_search(nums,85)

递归的应用场景

当你不知道该重复做多少次,但是知道在什么情况下该结束的时候,用递归会很好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值