2016-12-29 55 views
0

我試圖處理生成嵌套元組與平面列表的問題。我想獲得該函數執行的最大迭代次數(n_iter)。我似乎通過利用「和」運算符來解決這個問題,而在我的回調函數與初始函數之間使用「,」來解決這個問題。另外,這個功能運行得非常快。任何人都知道爲什麼這個邏輯有效它是否與「and」出現的評估有關?完全披露這是爲了做家庭作業,但我似乎已經回答了。Python遞歸「和」功能?

#n_iter should start as zero 
def break_it_down(n, n_iter): 
    if n > 2: 
     division, subtraction = n/2.0, n-1.0 
     n_iter +=1 
     return break_it_down(division,n_iter) and break_it_down(subtraction, n_iter) 
    return n_iter 
+0

你的問題不清楚!你在做什麼?我傳遞給你的函數的價值是什麼,它將返回值減去2.你想用你的代碼實現什麼。請簡要解釋你的和它的輸出。 –

+0

你認爲'和'在做什麼?它看起來錯了。 – user2357112

+0

因此,我的代碼旨在確定遊戲中玩家可以玩的最大數量,其中兩個玩家可以選擇將數字除以2或減1.此和從嵌套元組返回「max」值。 – CalTex

回答

0

原因是and是「短cirtuiting」。在

<expr-1> and <expr-2> 

表達<expr-2>不會被評估如果<expr-1>結果是「falsy」(即,它是在邏輯上下文考慮False)。

在你的情況下,例如與n=8除法調用是

n=4 → n=2 → n=1 -> n=0 

(在Python 2,1/2是0,當輸入是整數)

和代替減法

n=8 → n=7 → n=6 → n=5 → n=4 → n=3 → n=2 → n=1 → n=0 

n=0是「falsy」,但可以通過除法比用減法快得多。這意味着,如果你先用分割確認,然後才用減法的呼叫數量會小很多:

# division first 
n=8 
n=8/2=4 and n=8-1=7 
n=4/2=2 and n=4-1=3 
n=2/2=1 and n=2-1=1 
n=1/2=0 and n=1-1=0 (stop) 

# subtraction first 
n=8 
n=8-1=7 and n=8/2=4 
n=7-1=6 and n=7/2=3 
n=6-1=5 and n=6/2=3 
n=5-1=4 and n=5/2=2 
n=4-1=3 and n=4/2=2 
n=3-1=2 and n=3/2=1 
n=2-1=1 and n=2/2=1 
n=1-1=0 and n=1/2=0 (stop) 

有較大投入的差別甚至更大(例如256需要256個減法去0,但只有8個師)。

+0

太棒了!真的很感謝解釋!總體感覺。欣賞花時間教我! – CalTex