2016-07-19 3 views
0

특정 조건에서 재귀의 모든 출력을 저장하는 코드를 작성하려고합니다.재귀 중 출력 저장

내 MATLAB 코드는 다음과 같습니다

function answer= rec_solve(M, remainingValue, previousLevel, solutionSoFar) 
if (M == 1) 
    answer= [solutionSoFar remainingValue]; 
    % store only the outputs that reach here 
else 
for i=previousLevel:remainingValue/M 
    s= [solutionSoFar i]; 
    rec_solve(M-1, remainingValue-i, i, s); 
    end 
end 
end 

내가 매트릭스의 조건 (M == 1)하지만 성공하지에 도달에만 출력을 저장하기 위해 노력했다. 다른 기능으로 감싸 야한다고 생각하지만 올바른 방법으로 감싸는 방법을 알지 못합니다. 마치 ';'라고 인쇄 결과를 저장하려고합니다. 조건 (라인 3) 내에서 내려집니다.

미리 감사드립니다.

+0

글쎄, 대답은 함수의 결과입니다. 그래서 왜 결과를 알 수 없습니까? 함수를 반복하거나 정확히 저장하는 것이 문제가되는 곳입니까? – KiW

+0

'If'statemant의 답변 만 저장하려고합니다. 거기에 도달하는 재귀를 통해 여러 번, 어떻게 그런 일을 할 수 있습니까? 최종 답변은 필요한 N 개의 답변 중 단 1 개입니다. –

+0

이 함수에 대한 샘플 입력과 원하는 출력을 줄 수 있습니까? – beaker

답변

0

나는 당신이 원하는대로이 일을해야한다고 생각 :

function answer= rec_solve(M, remainingValue, previousLevel, solutionSoFar) 

k=0; 
    if (M == 1) 
     k=k+1; 
     answer(k,:)= [solutionSoFar remainingValue]; 
     % store only the outputs that reach here 
    else 
     for i=previousLevel:remainingValue/M 
     s= [solutionSoFar i]; 
     rec_solve(M-1, remainingValue-i, i, s); 
     end 
     end 
    end 

하지만 answer의 크기를 모르고, 어쩌면 당신이 뭔가에 (k,:)을 수정할. answer 변화가 크기를 경우 또한, 당신은 루프 전에 answer를 정의하려면 : N[solutionSoFar remainingValue]이 가질 수있는 최대 길이보다 큰

function answer= rec_solve(M, remainingValue, previousLevel, solutionSoFar) 

answer=zeros(1,N); 
k=0; 

if (M == 1) 
    k=k+1; 
    answer(k,1:numel([solutionSoFar remainingValue])= [solutionSoFar remainingValue]; 
    % store only the outputs that reach here 
else 
    for i=previousLevel:remainingValue/M 
    s= [solutionSoFar i]; 
    rec_solve(M-1, remainingValue-i, i, s); 
    end 
    end 
end 

.

아마도 가장 우아한 해결책은 아니지만 작동해야합니다.

+0

내 대답은 행이'[solutionSoFar remainingValue]'가되는 행렬을 생성한다는 점에 유의하십시오. 나는 이것이 당신이 원하는 것이라고 확신하지 못합니다. 나는 당신의 코드를 모른다. 원칙적으로 내 대답은 매트릭스의 연속적인 행에 저장하고자하는 것을 저장하라는 의미입니다. – shamalaia

+0

신경 쓰지 말고 직접 해결하십시오. 어쨌든 고마워요! –