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) #二分法
'''
 

猜你喜欢

转载自www.cnblogs.com/huyingsakai/p/9182977.html
今日推荐