我正在尝试在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
我感觉这是非常错误的。任何帮助将不胜感激。
非常感谢
答案 0 :(得分:0)
您的函数无法返回实际的值序列。你需要在循环中积累它。
CollSeq := proc (n::posint)
local i, s;
i := n;
s := i;
while 1 < i do
lprint(i);
i := Collatz(i);
s := s, i;
end do;
s;
end proc