3

再帰的な定義を使用して、Hofstadter の 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 (編集: 修正された正しい実装になりました)

Qwhere nis greater thanの各呼び出しの後にスタックに値が追加され、期待どおりに機能しないため、機能しないと思い2ます-rot

これを機能させるための簡単な調整はありますか?それとも、おそらく変数を使用して、別のアプローチを使用する必要がありますnか?

OEIS: A005185

4

1 に答える 1