我正在尝试使用递归定义来实现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
无法按预期工作。
是否有一个简单的调整来完成这项工作?还是我需要使用不同的方法,也许使用变量 for n
?
OEIS:A005185