2014-11-17 5 views
0

사용자로부터 숫자 (n)가 주어지면 Collatz 시퀀스를 실행하는 Maple의 기본 프로그램을 만들려고합니다. Collatz 시퀀스는 "주어진 숫자가 홀수라면 3n + 1을 짝수이면 2로 나누고 모든 대답에 대해 계속 수행합니다. 결과적으로 응답은 1에 도달합니다. " 시퀀스가 ​​수행되는 반복의 수를 잡으려고합니다. 시퀀스가 ​​10 번 실행되면이를 출력합니다. 여기에 내 현재 코드 :Maple 시퀀스 길이

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 

나는 이것이 끔찍한 잘못이라고 생각합니다. 어떤 도움이라도 대단히 감사 할 것입니다.

많은 감사

답변

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