Recursion 第四,具有递归的Hofstadter Q序列

Recursion 第四,具有递归的Hofstadter Q序列,recursion,sequence,forth,gforth,oeis,Recursion,Sequence,Forth,Gforth,Oeis,我试图使用递归定义实现: 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 ; :Q递归 dup 3< 如果 下降1 其

我试图使用递归定义实现:

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 ;
:Q递归
dup 3<
如果
下降1
其他的
dup dup 2dup 2-Q-Q-rot 1-Q-Q+
然后,;
在线试用:(编辑:现在有了固定的、正确的实现)

我认为它不起作用,因为在每次调用
Q
之后都会向堆栈中添加值,其中
n
大于
2
,这使得
-rot
无法像我预期的那样工作

是否有一个简单的调整,使这项工作?或者我是否需要使用不同的方法,可能需要为
n
使用一个变量


OEIS:

我意识到了我的错误。在调用
Q
之后,我不需要保留
n
,但我已经使用了
dup
足够的时间来保留每次调用。这会在每次调用后在堆栈上留下
n
,导致输出不正确。我删除了一个
dup
,它就可以工作了