Python中的递归函数

函数递归:函数的递归调用,即在函数调用的过程中,又直接或间接地调用了函数本身

# 直接调用
# def foo():
# print('from foo')
# foo()
#
# foo()

# 间接调用
# def bar():
# print('from bar')
# foo()
#
# def foo():
# print('from foo')
# bar()
#
# foo()

在使用递归时,需要注意以下几点:

  • 递归就是在过程或函数里调用自身
  • 必须有一个明确的递归结束条件,称为递归出口。

注意: 切勿忘记递归出口,避免函数无限调用。

 

递归的经典案例

>>> def factorial(n):
...     if n == 1:
...         return 1 ... else: ... return n * factorial(n - 1) ... >>> >>> factorial(1) 1 >>> >>> factorial(5) 120 >>> >>> factorial(10) 3628800
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

当使用正整数调用 factorial() 时,会通过递减数字来递归地调用自己。

为了明确递归步骤,对 5! 进行过程分解:

factorial(5)                        # 第 1 次调用使用 5
5 * factorial(4)                    # 第 2 次调用使用 4 5 * (4 * factorial(3)) # 第 3 次调用使用 3 5 * (4 * (3 * factorial(2))) # 第 4 次调用使用 2 5 * (4 * (3 * (2 * factorial(1)))) # 第 5 次调用使用 1 5 * (4 * (3 * (2 * 1))) # 从第 5 次调用返回 5 * (4 * (3 * 2)) # 从第 4 次调用返回 5 * (4 * 6) # 从第 3次调用返回 5 * 24 # 从第 2 次调用返回 120 # 从第 1 次调用返回
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

当数字减少到 1 时,递归结束。

 

二分法:

二分查找

 
 
nums=[1,3,7,11,22,34,44,55,66,77,88,99,111,222,333,444]

# for item in nums:
# if item == 10:
# print('find it')
# break
# else:
# print('not exist') #这种占用大量内存,不推荐,效率低下

def search(search_num,nums):
print(nums)
if len(nums) == 0:
print('not exists')
return
mid_index=len(nums) // 2
if search_num> nums[mid_index]:
nums=nums[mid_index+1:]
search(search_num,nums)
elif search_num<nums[mid_index]:
nums=nums[:mid_index]
search(search_num,nums)
else:
print('find it')
search(31,nums) #二分法
'''
 

转载于:https://www.cnblogs.com/huyingsakai/p/9182977.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值