2016-07-19 4 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

Дело в том, что я хочу хранить только ответы от «Если» statemant. Есть много раз через рекурсию, которая достигает там, как я могу это сделать? Окончательный ответ - только 1 из N ответов, которые мне нужны. –

+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 перед циклом:

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 

где N больше максимальной длины, которая может иметь [solutionSoFar remainingValue].

Возможно, не самое изящное решение .. но оно должно работать.

+0

Обратите внимание, что мой ответ создаст матрицу, в которой строки будут '[solutionSoFar stillValue]'. Я не уверен, что это то, что вы хотите. Я не знаю вашего кода. В принципе, мой ответ предлагает сохранить то, что вы хотите сохранить в последовательных строках матрицы – shamalaia

+0

, никогда, не решил, сам решил. Спасибо, в любом случае! –

Смежные вопросы