python二分法递归_python 【递归 及 二分法】
python 【遞歸函數(shù) 及 二分法】
一、遞歸的定義
在一個函數(shù)里再調(diào)用這個函數(shù)本身,這種魔性的使用函數(shù)的方式就叫做遞歸。
遞歸的最大深度——997
#修改遞歸層數(shù)
import sys
sys.setrecursionlimit(10000000)#修改遞歸層數(shù)
n=0
def f():
global n
n+=1
print(n)
f()
f()
我們可以通過以上代碼,導(dǎo)入sys模塊的方式來修改遞歸的最大深度。
sys模塊:所有和python相關(guān)的設(shè)置和方法
. 結(jié)束遞歸的標(biāo)志:return
.遞歸解決的問題就是通過參數(shù),來控制每一次調(diào)用縮小計算的規(guī)模
使用場景:數(shù)據(jù)的規(guī)模在減少,但是解決問題的思路沒有改變
很多排序算法會用到遞歸
# 小例子:
# 猜年齡
# alex多大了 alex 比 wusir 大兩歲 40+2+2
# wusir多大了 wusir 比 金老板大兩歲 40+2
# 金老板多大了 40了
# age(1)
# n = 1 age(2)+2
# n = 2 age(3)+2
# n = 3 age(3) = 40
# def age(n):
# if n == 3:
# return 40
# else:
# return age(n+1)+2
#
# print(age(1))
# # n = 1
# def age(1):
# if 1 == 3:
# return 40
# else:
# return age(2)+2
#
# # n = 2
# def age(2):
# if 2 == 3:
# return 40
# else:
# return age(3)+2
#
# # n = 3
# def age(3):
# if 3 == 3:
# return 40
二、二分算法
# 算法
# 99*99 = 99*(100-1) = 9900-99 = 9801
# 人類的算法
# 99 * 99
# 算法 計算一些比較復(fù)雜的問題
# 所采用的 在空間上(內(nèi)存里) 或者時間上(執(zhí)行時間) 更有優(yōu)勢的方法
# 排序 500000萬個數(shù) 快速排序 堆排序 冒泡排序
# 查找
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# 列表不能變
def cal(l,num,start,end):
mid = (end - start)//2 + start
if l[mid] > num :
cal(l, num, start, mid-1)
elif l[mid] < num: # 13 24
cal(l,num,mid+1,end)
else:
print('找到了',mid,l[mid])
cal(l,60,0,len(l)-1)
#
# def cal(l,num=66):
# length = len(l)
# mid = length//2
# if num > l[mid]:
# l = l[mid+1:]
# cal(l,num)
# elif num < l[mid]:
# l = l[:mid]
# cal(l, num)
# else:
# print('找到了',l[mid],mid)
# cal(l,66)
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
def cal(l,66,0,24):
mid = 12 + 0
if 41 > 66 :
cal(l, num, start, mid-1)
elif 41 < 66: # 13 24
cal(l,66,13,24)
else:
print('找到了',mid,l[mid])
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
def cal(l,66,13,24):
mid = 5 + 13
if 67 > 66 :
cal(l, 66, 13, 17)
elif l[mid] < num: # 13 24
cal(l,num,mid+1,end)
else:
print('找到了',mid,l[mid])
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
def cal(l,66,13,17):
mid = 2 + 13
if 55 > 66 :
cal(l, num, start, mid-1)
elif 55 < 66:
cal(l,66,16,17)
else:
print('找到了',mid,l[mid])
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
def cal(l,60,16,17):
mid =0 + 16
if 56 > 60 :
cal(l, num, start, mid-1)
elif 56 < 60: # 13 24
cal(l,60,17,17) #None
else:
print('找到了',mid,l[mid])
#
# l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
def cal(l,60,17,17):
mid = 0 + 17
if 60 > 66 :
cal(l, num, start, mid-1)
elif 60 < 66: # 13 24
return cal(l,60,18,17)
else:
print('找到了',17,66)
def cal(l, 60, 18, 17):
if start
mid = 0+18
if 67 > 66:
cal(l, 60, 18,17)
elif 60 < 66: # 13 24
cal(l, 60, 18, 17)
else:
print('找到了', 17, 66)
else:
print('沒找到')
# 算法
# def cal(l,num,start=0,end=None):
# # if end is None:end = len(l)-1
# end = len(l)-1 if end is None else end
# if start <= end:
# mid = (end - start)//2 + start
# if l[mid] > num :
# return cal(l, num, start, mid-1)
# elif l[mid] < num: # 13 24
# return cal(l,num,mid+1,end)
# else:
# return mid
# else:
# return None
# l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# print(cal(l,56))
# 參數(shù)太多 -------- ???
# 找的數(shù)不存在 ———— 解決了
# print return ------- 解決
總結(jié)
以上是生活随笔為你收集整理的python二分法递归_python 【递归 及 二分法】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 移动端 滑块验证码插件_VUE技术
- 下一篇: mysql udf提权_MySQL日志安