2016-02-01 64 views
0

所以我在python中遞歸地做了最小硬幣更改問題。我想要查看它正在進行多少次遞歸調用。所以我在我的函數中加入了一個「打印」遞歸「」。但現在它不斷的打印遞歸,沒有達到輸出,程序甚至沒有停止。這是該計劃。Python2:當我在函數中使用print語句但遞歸運行時遞歸不起作用

def min_coins(coins, change): 
    print 'recursion' #program works without this line 
    mincoins = change 
    if change in coins: 
     return 1 
    else: 
     for i in coins: 
      if i<=change: 
       numcoins = 1 + min_coins(coins, change-i) 
       if(numcoins < mincoins): 
        mincoins = numcoins 
    return mincoins 

c = [1,5,25] 
d = 50 

print min_coins(c, d) 
+3

適合我,無法複製。這應該是這種情況 - 打印不能影響該代碼。也許你沒有等待足夠長的時間來看最後的結果,或者它正在一片「回憶」線上流失? – mhawke

+1

謝謝。事實證明,我並沒有等待足夠長的時間。 – ailhahc

+1

如果你想想你正在試圖解決的問題,你應該能夠想出一個更好的解決方案,只需要一小部分的遞歸調用。 – Duncan

回答

6

控制檯是相當緩慢的,你沒有足夠的耐心:

python your_program.py | wc -l 
684886 

有更好的方法,使用一個全局計數器變量或返回一對(mincoins, counter)

+0

好的謝謝澄清。但是當我運行沒有打印語句的代碼時,輸​​出不到2秒。但是,當我添加打印它運行更多的時間。爲什麼這樣? – ailhahc

+1

@ailhahc因爲Python可以在2秒內完成684886遞歸調用,但是當它必須將輸出寫入控制檯時也不會。 'print'很慢! – Duncan

+0

@Duncan謝謝。我沒有意識到這一點。 – ailhahc