내가 이런 식으로, 매스 매 티카에서 재귀 계승을 정의한 상상 :Mathematica에서 재귀 함수의 대체가 종료되지 않는 이유는 무엇입니까?
Clear[fact]
fact[0] = 1
fact[n_] := n fact[n - 1]
사실 [10] 평가 기능이 작동하고 종료 있음을 확인합니다.
스테이플 예의 비트이지만이 질문에서 그 목적을 수행합니다. 사실, 제 질문은 일반적으로 재귀 함수 정의와 관련이 있습니다.
: 나는 같은 것을 볼 것으로 예상$RecursionLimit::reclim: Recursion depth of 256 exceeded.
:
x fact[x-1] /. x -> 2
아아, 그것은 재귀 깊이 한계에서 실행 :
은 나뿐만 아니라 종료 다음 교체를 평가 예상
2 fact[2-1]
또는 값이
(210)2
UPDATE : 사실의 또 다른 재귀 정의않습니다 예상대로 작동 :
Clear[fact]
fact[n_] := If[n < 1, 1, n fact[n - 1]]
그러나이 사실 (말장난이 ;-)이 더욱 신비 나에게한다 : 그것을 수행하는 이유 순전히 다르게 행동 하는가?
내 질문은 두 가지이다 :
심지어 티카 분명히에서 주장하는 이유 내장 도움과 단서의 순을 검색, 나는 상징적 인 결과를 유지하기보다는 평가, 설명 할 수와'중급'결과와 잘 종료. 실행 가능한 설명을 모험하는 사람은 누구입니까?
[]를 사용하는 대안을 사용하는 것 외에 다른 방법으로 Mathematica가 수행하도록 설득하려면 어떻게해야합니까?
저는이 부분에 당황스럽고, 저를 도와 줄 누군가가 있기를 바랍니다.
/TWAN
아하, 이해할 수있다. Mathematica는 먼저 /의 LHS를 계산한다. _then_이 대체를 수행합니다.그리고 Hold []를 사용하면 '열망하는'평가를 연기 할 수 있습니다. 훌륭한 답변 주셔서 감사합니다. 효과적이고 관련성이 높으며 명확하고 간결합니다! 내 칭찬 – nanitous
@nanitous 건배! 세 가지 대답 중 하나가 질문에 대한 답을하면, 대답을 허용 대답으로 표시하여 맨 위에 나타낼 수 있습니다 (답변자에게 평판이 향상됩니다). – acl
그 점을 지적 해 주셔서 감사합니다! – nanitous