函式遞迴 遞推與回溯 練習題

2022-06-30 16:42:11 字數 3952 閱讀 4729

遞迴與二分法習題

二分法就是在按照從大到小或者從小到大規律排布的列表中,

尋找的值通過與中間的值比較大小,從而對列表進行操作,然後再比較的迴圈過程。

用遞迴的方法找出列表中的值

num = [1,3,4,5,6,8,22,33,55,778,990]

def search(search_number,num):

if len(num) == 0:return

mid = len(num) // 2

mid_nums = num[len(num)//2]

if search_number > mid_nums:

num = num[mid + 1:]

search(search_number,num)

elif search_number < mid_nums:

num = num[:mid]

search(search_number, num)

else:

print("find it")

search(363,num)

2.根據最後乙個人的年齡,猜測第乙個人的年齡

# def age(n): # 猜第五個人的年齡,傳進引數5

# if n == 1: # 已知最後乙個人的年齡 為26 (條件成立,遞推結束後,開始回溯)

# return 26

# return age(n-1) + 2 # age(4) +2 ---》 age(3) + 2 ---> age(2) +2 --->age(1) +2

## print(age(5))

3.列表巢狀列表,用遞迴取得列表中的所有值。

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)

# 使用遞迴列印斐波那契數列

# 0、1、1、2、3、5、8、13、21 # 0,1 1,1 1,2 2,3 3,5 5,8

# def fib(max):

# n,a,b = 0,0,1

# while n < max:

# print(b) #直接輸出數列的值

# a,b = b,a+b #b賦值給a後,a = 1,a+b 賦值給b b還是一,因為賦值後的a並沒有立即參與運算。

# n += 1

# print(fib(15))

# 0、1、1、2、3、5、8、13、21

# def func(num1,num2):

## res = num1+num2 # res = 1

# print(res)

# num1=num2

# num2 = res

# if res < 10000:

# func(num1,num2)

# else:

# return

## func(0,1)

# 2.乙個巢狀很多層的列表,如l =[1, 2, [3, [4, 5, 6, [7, 8, [9, 10, [11, 12, 13, [14, 15]]]]]]],用遞迴取出所有的值

# l =[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]]

# def tell(l):

# for item in l:

# if type(item) is list:

# tell(item)

# else:

# print(item)

# tell(l)

# 3. 編寫使用者登入裝飾器,在登入成功後無需重新登入,同一賬號重複輸錯三次密碼則鎖定5分鐘

# import time

# user_status = ##

# def logging(func):

# count = 0

# while true:

## if count == 3:

# print("使用者名稱或密碼錯誤,賬戶已被鎖定")

# time.sleep(100)

# if user_status["user"]: # 這兒注意點

# res = func(*args, **kwargs)

# return res

# name = input("使用者名稱》: ").strip()

# pwd = input("密碼》: ").strip()

## if name == "egon" and pwd == "123":

# print("logging success")

# user_status["user"] = name

# res = func(*args,**kwargs)

# return res

# else:

# print("使用者名稱或密碼錯誤")

# count += 1##

# @logging

# def index(name):

# print("welcome to my country".format(name = name))

# return 123##

# @logging

# def auth(name):

# print("welcome to my country".format(name = name))

# return 234##

# index("egon")

# auth("luffei")

# 4、求檔案a.txt中總共包含的字元個數?思考為何在第一次之後的n次sum求和得到的結果為0?(需要使用sum函式)

# with open("a.txt",encoding="utf-8") as f:

# res = [len(line) for line in f]

# print(sum(res))

# 5、檔案shopping.txt內容如下

## mac,20000,3

# lenovo,3000,10

# tesla,1000000,10

# chicken,200,1

# 求總共花了多少錢?

## 列印出所有商品的資訊,格式為[,...]

## 求單價大於10000的商品資訊,格式同上

db_file = "a.txt"

with open(db_file,encoding="utf-8") as f:

res = [ for line in f]

print(res)

res2 = [item for item in res if int(item["price"])>10000]

print(res2)

遞迴函式練習題

1 寫乙個函式,接收乙個引數,用來返回這個函式的階乘並輸出 12345 def func num if num 1 return 1 ret func num 1 return num ret print func 5 2 寫乙個函式實現斐波那契數列 1,2,3,5,8,13,21,34,55,89...

PTA 演算法練習題 回溯

1.最佳排程問題 假設有n n 20 個任務由k k 20 個可並行工作的機器完成。完成任務i需要的時間為ti。試設計乙個演算法,對任意給定的整數n和k,以及完成任務i 需要的時間為ti i 1 n。計算完成這n個任務的最佳排程,使得完成全部任務的時間最早。輸入格式 輸入資料的第一行有2 個正整數n...

函式練習題

1.打字軟體的正確率 編寫函式,計算字串匹配的準確率,類似於打字軟體 orginstr為原始內容,userstr為使用者輸入內容 2.模擬輪盤 遊戲 轉盤分為三部分 一等獎 二等獎和三等獎 輪盤轉的時候是隨機的,如果範圍在 0,0.08 之間,代表一等獎 如果範圍在 0.08,0.3 之間,代表二等...