[英]Nothing is output in python recursive function
我正在編寫一個代碼來計算翻轉立方體的兩個配置之間的“距離”,兩個配置 x 和 y 之間的距離是 go 從 x 到 y 所需的最小步數,或者相反。
為了做到這一點,我創建了一個更簡單的版本,使一些不同,這段代碼需要兩個 integer 數字ci和cf 。 with ci通過名為multi的生成器返回一個名為main_level的可迭代對象,然后,它遍歷它以搜索參數cf ,只要cf不在main_level中,變量steps就會增加 1 並且對於main_level中的每個元素,我們重復相同的過程為ci 。 最后,當cii==cf程序結束並返回steps變量,它計算我們必須向下 go 找到給定參數cf的“級別”數。 這段代碼沒有任何實際用途,只是我上面提到的問題的基礎。
如果我用 ci=5 調用距離(ci,cf) function,前兩個級別是:
{0,3,6,9,12} <-- 第一級(steps 初始化為 1)如果cf是集合中的任何數字,則程序應該結束並返回 steps= 1 ,如果cf不在其中設置,程序形成第二級: {15,18,21,24,27,30,33}並搜索cf ,如果cf在那里,程序結束並應該返回 steps= 2 ,如果沒有,它 forms 第三水平等等。 但是有一個問題,實際上,當我用ci =5 和cf = 任何自然數調用距離 function 並打印它的值時,任何東西都是 output,僅對於cf =0,它輸出 step= 1 。 我真的不知道發生了什么事。 我會很感激你的幫助。
這是代碼:
#Base solution to FlipCube problem
def multi(par):
for i in range(par):
yield i*3
steps=1
def distance(ci,cf):
main_level =set(multi(ci))
global steps
def check_main_level(cf):
global steps
nonlocal main_level
def lower_level(config_list):
sett=set()
for i in config_list:
sett.update(q for q in multi(i) if q not in config_list)
nonlocal main_level
main_level=sett
check_main_level(cf)
for i in main_level:
if i==cf:
break
else:
steps+=1
lower_level(main_level)
check_main_level(cf)
return steps
#testing
e= distance(5,0)
print(e)# prints 1, very good
e2= distance(5,9)
print(e2)# should print 1, but doesn't print anything :(
e3= distance(5,27)
print(e3)# should print 2, but doesn't print anything :(
程序不會在所有情況下終止遞歸。 罪魁禍首似乎是check_main_level
中的for
循環。 將lower_level
定義后的代碼更改為:
# code portion of check_main_level
if cf > max(main_level):
steps+=1
lower_level(main_level)
# end of code portion check_main_level (replacing for-loop)
你有一個無限循環,這就是為什么沒有打印任何內容。
您可以通過添加打印輕松地看到它:
for i in config_list:
print(i)
sett=set()
sett.update(q for q in list(multi(i)) if q not in config_list)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.