2014-11-10 7 views
0

Maple 12에서 입력 "n"을 가져 와서 시퀀스 1의 모든 숫자를 출력하는 프로 시저를 만들려고합니다!, 1! + 2!, 1! + 2! + 3 !, ... 등을 사용자 입력까지 및 하나의 값 이상 (즉, n보다 큰 시퀀스의 첫 번째 숫자)으로 설정합니다. 코드가 아마 쓰레기이고 작동하도록 많은 정보를 제공하지 않은, 그래서 무엇이든 기꺼이 될 수 있도록, 그래서 나는 거의 completly 새로운 메이플에있어Maple Factorials

fact := proc (n); 
local i, a; 
a = 1 
i = 1 
while i < n do 
list(a) = i; 
a = a + 1 
i = b(1..(a! + list(a - 1))); 
od 
return(b) 
end 

: 여기

내 현재 코드입니다 받아 들였다.

많은 감사합니다.

답변

0

몇 가지가 있습니다.

restart: 

fact:=proc(n::posint) 
    local i, a, b; 
    a := 1; 
    b[1] := 1; 
    for i from 2 to n+1 do 
    a := a*i; 
    b[i] := b[i-1] + a; 
    end do; 
    return seq(b[i],i=1..n+1); 
end proc: 

for k from 1 to 10 do 
    fact(k); 
end do; 

restart: 

fact2:=proc(n::posint) 
    local i; 
    seq(add(i!,i=1..k),k=1..n+1); 
end proc: 

for k from 1 to 10 do 
    fact2(k); 
end do; 

restart: 

fact3:=proc(n::posint) 
    option rememeber; 
    local i,t; 
    if n=1 then 
    return 1,3; 
    else 
    t:=fact3(n-1); 
    return t, t[-1]+(n+1)!; 
    end if; 
end proc: 

for k from 1 to 10 do 
    fact3(k); 
end do; 

위의 두 번째 방법은 재사용하지 않고 계승을 계속 반복하여 계산하므로 효율성이 가장 낮습니다. 세 번째 접근법은 재귀 적입니다.

+0

감사합니다. 값을 저장하는 목록을 만들려고 생각했지만 어떻게 작성했는지 모릅니다. –

+0

오른쪽. 첫 번째 예제에서 로컬'b'는 (다른 경우 할당되지 않은) 인덱스 된 이름을 저장 한 결과와 마찬가지로 테이블입니다. 또는 '[1]'로 시작하여 루프를 확장하는 대신 목록을 사용할 수 있습니다 b : = [op (b), a]'에 의해. 그러나 그것은 보통 메모리에서 O (n^2)이기 때문에 일반적으로 비효율적입니다. – acer