我正在尝试在 Maple 中创建一个基本程序,当用户给定一个数字 (n) 时运行 Collatz 序列。对于那些不知道的人,Collatz 序列基本上是“如果给定的数字是奇数,则做 3n + 1,如果是偶数,则除以 2,然后对每个答案继续这样做。最终,答案将达到 1 “我试图获取执行序列的迭代次数,比如如果序列运行了 10 次,它会打印出来。这是我当前的代码:
Collatz := proc (n::posint)
if type(n, even) then (1/2)*n
else 3*n+1
end if
end proc
CollSeq := proc (n::posint)
local i;
i := n;
while 1 < i do
lprint(i);
i := Collatz(i)
end do
end proc
到目前为止,这是可行的,如果输入了 proc CollSeq(50),它将在 50 上执行 Collatz 序列,直到达到 1。我坚持的一点是序列的长度。我已经阅读并了解到我可以使用 Maple 的 nops([]) 函数来获取序列的长度。这是我尝试过的:
CollLen := proc (n::posint)
local c;
c := CollSeq(n);
print(nops([c]))
end proc
我有一种感觉,这是非常错误的。任何帮助将非常感激。
非常感谢