我不能讓它在Dyalog APL 中作業
solve←{
n a c b←?
n≤0:?
solve(n-1)a b c
?←'Move disk from' a 'to' c
solve(n-1)b c a
}
solve 4 'A' 'C' 'B'
它從第一個回圈,solve (n-1) a b c但永遠不會到達第 4 行。
相同的代碼適用于 JavaSCRipt:
solve = (n, a, c, b) => {
if (n <= 0) return
solve(n-1, a, b, c)
console.log(`Move disk from ${a} to ${c}`)
solve(n-1, b, c, a)
}
solve(4, 'A', 'C', 'B')
當我列印輸入引數時,它顯示:
solve←{
n a c b←?
?←n a c b
n≤0:?
solve(n-1)a b c
?←'Move disk from' a 'to' c
solve(n-1)b c a
}
4 ACB
3 ABC
2 ACB
1 ABC
0 ACB
有任何想法嗎?
uj5u.com熱心網友回復:
dfn 將在第一個非分配時回傳。您的遞回呼叫都是非賦值的,因此該函式不會回傳您認為的位置。你可以像這樣稍微調整它:
solve←{
(n a c b)←?
n≤0:?
_←?(n-1)a b c ? Capture and ignore result
?←'Move disk from' a 'to' c
_←?(n-1)b c a ? Capture and ignore result
? ? Return empty vector
}
注意?for 遞回的使用——這是當前 dfn 的簡寫。如果我運行這個修改過的版本,我會得到:
solve 4 'A' 'C' 'B'
Move disk from A to B
Move disk from A to C
Move disk from B to C
Move disk from A to B
Move disk from C to A
Move disk from C to B
Move disk from A to B
Move disk from A to C
Move disk from B to C
Move disk from B to A
Move disk from C to A
Move disk from B to C
Move disk from A to B
Move disk from A to C
Move disk from B to C
Roger Hui 寫了一篇關于這個問題的論文,非常值得一讀:https : //www.jsoftware.com/papers/50/50_38.htm
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/356402.html
下一篇:Python遞回更新陣列
