递归
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)