再帰的な定義を使用して、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 (編集: 修正された正しい実装になりました)
Q
where n
is greater thanの各呼び出しの後にスタックに値が追加され、期待どおりに機能しないため、機能しないと思い2
ます-rot
。
これを機能させるための簡単な調整はありますか?それとも、おそらく変数を使用して、別のアプローチを使用する必要がありますn
か?
OEIS: A005185