2016-07-29 5 views
3

je tente de mettre en œuvre Hofstadter's Q Sequence en utilisant la définition récursive:Forth, Séquence Hofstadter Q avec Recursion

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

je reçois le mauvais résultat pour n > 3. Voici ce que j'ai jusqu'à présent:

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

Essayez en ligne:http://ideone.com/PmnJRO (Edit: Maintenant a fixe, la mise en œuvre correcte)

Je pense que cela ne fonctionne pas parce qu'il ya des valeurs ajoutées au empiler après chaque appel de Qn est supérieur à 2, rendant -rot ne fonctionne pas comme prévu.

Existe-t-il un réglage simple pour que cela fonctionne? Ou dois-je utiliser une approche différente, peut-être en utilisant une variable pour n?

OEIS: A005185

Répondre

4

j'ai réalisé mon erreur. Je n'avais pas besoin de conserver n après avoir appelé le Q, mais j'avais utilisé dup assez de fois pour le préserver chaque appel. Cela laissait n sur la pile après chaque appel, rendant la sortie incorrecte. J'ai enlevé un des dup et cela fonctionne.