递归

递归

1 什么是函数递归
函数递归调用(是一种特殊的嵌套调用):在调用一个函数的过程中,又直接或间接地调用了该函数本身

递归必须要有两个明确的阶段:
递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须有所减少
回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推
开始一层一层回溯

递归的精髓在于通过不断地重复逼近一个最终的结果

2、为什么要用函数递归

通过不断地重复逼近一个最终的结果

3、如何用递归

#递推:一层一层递归调用
#但不满足回溯
# def func(n): # print(n) # func(n + 1) # # # func(1) # def func(): # print('from func') # bar() # def bar(): # print('from bar') # func() # # func()
#递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须有所减少
#回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推开始一层一层回溯
# age(5) = age(4) + 2 # age(4) = age(3) + 2 # age(3) = age(2) + 2 # age(2) = age(1) + 2 # age(1) = 26 #结束条件 # age(n) = age(n-1) + 2 #n > 1 # age(1) = 26 #n = 1 # def age(n): # if n == 1: # return 26 # return age(n-1) + 2 # # print(age(5))
#取出列表中1,2,3,4,5,6,7,8,9
l=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]

def tell(l):
    for item in l:
        if type(item) is list:
            #继续进入下一层递归
            tell(item)
        else:
            print(item)

tell(l)
# 有一个从小到大排列的整型数字列表
# nums=[1,3,7,11,22,34,55,78,111,115,137,149,246,371]
# 10 in nums
# for item in nums:
#     if item == 10:
#         print('find it')
#         break
# else:
#     print('not exists')
nums=[1,3,7,11,22,34,55,78,111,115,137,149,246,371]
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]:
        # in the right
        nums=nums[mid_index+1:]
        search(search_num,nums)
    elif search_num < nums[mid_index]:
        # in the left
        nums=nums[:mid_index]
        search(search_num,nums)
    else:
        print('find it')

search(31,nums)
原文地址:https://www.cnblogs.com/hanbowen/p/9182991.html