ユーザーから数値 (n) が与えられたときに Collatz シーケンスを実行する基本的なプログラムを Maple で作成しようとしています。知らない人のために言っておくと、コラッツ数列は基本的に「与えられた数が奇数なら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) が入力されると、1 に達するまで 50 で Collatz シーケンスが実行されます。私は周りを読んで、Maple の nops([]) 関数を使用してシーケンスの長さを取得できる可能性があることを知りました。これが私が試したことです:
CollLen := proc (n::posint)
local c;
c := CollSeq(n);
print(nops([c]))
end proc
これはひどく間違っていると感じています。どんな助けでも大歓迎です。
どうもありがとう