2016-07-29 40 views
3

我試圖使用遞歸定義來實現Hofstadter's Q Sequence第四,霍夫斯塔特Q序列與遞歸

Q(1) = 1 
Q(2) = 1 
Q(n) = Q(n - Q(n-2)) + Q(n - Q(n-1)) for n > 2 

我得到n > 3錯誤的結果。這是我到目前爲止有:

: Q recursive 
    dup 3 < 
    if 
     drop 1 
    else 
     dup dup 2dup 2 - Q - Q -rot 1- Q - Q + 
    then ; 

在線試玩:http://ideone.com/PmnJRO(編輯:現在已經固定,正確執行)

我認爲這是行不通的,因爲有添加到值在每次調用Q之後堆棧,其中n大於2,使-rot無法正常工作。

有沒有一個簡單的調整,使這項工作?或者我需要使用不同的方法,也許使用變量爲n

OEIS:A005185

回答

4

我意識到自己的錯誤。在撥打Q之後,我並不需要保留n,但我已使用dup足夠多的時間來保存每次呼叫。這會在每次調用後在堆棧上留下n,使輸出不正確。我刪除了dup之一,它的工作原理。