2016-07-29 18 views
3

とホフスタッターQシーケンスIは、再帰的な定義を使用してHofstadter's Q Sequenceを実装しようとしています:、再帰

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(編集:今固定している、正しい実装)

私は付加価値があるので、それが動作しないと思いますそれぞれの呼び出しの後にスタックします。Qn2より大きく、-rotは期待どおりに動作しません。

この作業を行うための簡単な調整はありますか?あるいは、別のアプローチを使用する必要がありますか?nの変数を使用していますか?

OEIS:A005185

答えて

4

私は私のミスを実現しました。私はQを呼び出した後にnを保存する必要はありませんでしたが、私はdupを使って各呼び出しを保存しました。これにより、各呼び出し後にスタックにnが残って、出力が不正確になります。私はdupのうちの1つを削除して動作します。