想象我在數學定義的遞歸階乘,像這樣:在Mathematica中,爲什麼遞歸函數中的替換不會終止?
Clear[fact]
fact[0] = 1
fact[n_] := n fact[n - 1]
評估事實[10]確認功能的工作原理和終止。
一個主要的例子,但它在這個問題上的目的。實際上,我的問題一般都是關於遞歸函數定義的。
我的預期評估以下替換終止,以及:
x fact[x-1] /. x -> 2
唉,在一個遞歸深度限制運行:
$RecursionLimit::reclim: Recursion depth of 256 exceeded.
我希望看到這樣的:
2 fact[2-1]
或只是值
2
UPDATE:的其實另一種遞歸定義確實按預期方式工作:
Clear[fact]
fact[n_] := If[n < 1, 1, n fact[n - 1]]
但這一事實(雙關語意;-)使得它更神祕的對我說:爲什麼它表現如此不同?
我的問題是雙重的:
即使有內置的幫助和搜索網爲線索,我無法解釋爲什麼數學在堅持,很顯然,保持象徵性的結果,而不是評估'中間'結果並很好地結束。誰冒險一個可行的解釋?
我該如何說服Mathematica根據我的期望執行(除了使用的替代方案,如果 [])?
我真的很困惑這個,我真的希望有人能幫助我。
/M煉
Aha,這很有道理:Mathematica首先評估/的LHS。然後_then_執行替換。通過Hold [],您可以推遲「渴望」的評估。感謝您的傑出答案:有效,相關,清晰和簡潔!我的讚美 – nanitous
@nanitous乾杯!如果三個答案中的一個能夠回答您的問題,您可以將其標記爲已接受的答案,以便它出現在頂部(併爲答案者提供聲望提升)。 – acl
謝謝指出! – nanitous