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
,它就可以工作了