1

ユーザーから数値 (n) が与えられたときに Collat​​z シーケンスを実行する基本的なプログラムを 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 で Collat​​z シーケンスが実行されます。私は周りを読んで、Maple の nops([]) 関数を使用してシーケンスの長さを取得できる可能性があることを知りました。これが私が試したことです:

CollLen := proc (n::posint) 
local c; 
c := CollSeq(n); 
print(nops([c])) 
end proc

これはひどく間違っていると感じています。どんな助けでも大歓迎です。

どうもありがとう

4

1 に答える 1

1

関数が実際の値のシーケンスを返すことができません。ループを通過するにつれて、それを蓄積する必要があります。

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
于 2014-11-17T17:17:05.003 に答える