日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python二分法递归_python 【递归 及 二分法】

發布時間:2025/4/16 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python二分法递归_python 【递归 及 二分法】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python 【遞歸函數 及 二分法】

一、遞歸的定義

在一個函數里再調用這個函數本身,這種魔性的使用函數的方式就叫做遞歸。

遞歸的最大深度——997

#修改遞歸層數

import sys

sys.setrecursionlimit(10000000)#修改遞歸層數

n=0

def f():

global n

n+=1

print(n)

f()

f()

我們可以通過以上代碼,導入sys模塊的方式來修改遞歸的最大深度。

sys模塊:所有和python相關的設置和方法

.  結束遞歸的標志:return

.遞歸解決的問題就是通過參數,來控制每一次調用縮小計算的規模

使用場景:數據的規模在減少,但是解決問題的思路沒有改變

很多排序算法會用到遞歸

# 小例子:

# 猜年齡

# 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

# 算法 計算一些比較復雜的問題

# 所采用的 在空間上(內存里) 或者時間上(執行時間) 更有優勢的方法

# 排序 500000萬個數 快速排序 堆排序 冒泡排序

# 查找

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

# 參數太多 -------- ???

# 找的數不存在 ———— 解決了

# print return ------- 解決

總結

以上是生活随笔為你收集整理的python二分法递归_python 【递归 及 二分法】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。