1.什么是函数递归?(what) 函数的递归调用是函数嵌套的一种特殊形式:直接or间接的嵌套该函数本身 本质:就是一个循环的过程
2.为何要用函数递归?(why) 在某些情况下,用函数递归来使用重复的过程,会比用while循环更简单。
3.如何用函数递归?(how) 两个原则: 1.每次进入下一层递归,问题的规模必须有所减少 2.递归必须有一个明确的结束条件 递归又分两个明确的阶段: 1.回溯:一层一层的递归调用下去 2.递推:在某一层结束递归,然后一层一层的返回
or
1.递归:将问题规模为n的问题降解成若干个规模为n-1的问题,依次降解,直到问题规可
求,求出低阶规模的解,代入高阶问题中,直至求出规模为n的问题的解。
2.递推:构造低阶的规模(如规模为i,一般i=0)的问题,并求出解,推导出问题规模为i+1的
问题以及解,依次推到规模为n的问题
#调用函数本身的两种方式 #方式一:直接调用
def f1():
print('from f1')
f1()
#方式二:间接调用
def f2():
print('from f2)
f1()
def f1():
pring('from f1')
f2()
#eg1.
# age(5)=age(4)+2
# age(4)=age(3)+2
# age(3)=age(2)+2
# age(2)=age(1)+2
# age(1)=18
# age(n)=age(n-1)+2 n>1
# age(1)=18
前一个人比后一个人的年龄大2岁,计算每一个人的年龄
#方式一:
def age(n):
if n == 1:
return 18
else:
return age(n-1)+2
res=age(7)
print(res)
二分法
是算法的一种,简而言之就是把一个很长的数列一分为二,然后和中间值对比
但是一个大原则就是,如果是数列的话,一定要是有序数列,
nums=[1,13,23,27,31,33,57,73,81] #从小到大的数字list
#找到73这个数
def binary_search(num,nums):
if len(nums) == 0 :
print('num not exist')
return
mid_index=len(nums)//2
elif num > nums[mid_index]:
nums=nums[mid_index:]
binary_search(num,nums)
elif num < nums[mid_index]:
nums=nums[:mid_index]
binary_search(num,nums)
else:
print('get it')
binar_search(73,nums)