How to understand a recursion problem? and how to get its solution value?

조회 수: 4 (최근 30일)
John
John 2016년 3월 5일
편집: Stephen23 2016년 3월 6일
Hi guys,
i implemented a quite large code recursively.... the goal is to improve a tour by adding clients until no client is permitted anymore. The abstract pseudocode works like this:
function [ best_tour ] = improvement( tour )
if ~isempty(next_client)
x=next_client(best) %client out of a set of clients chosen with a specific criteria
tour_temp=[tour,x_index_in_tour]; %integration into the tour at a specific index
if tour fulfills_constraints
[ best_tour ] = improvement( tour_temp )
next_client=next_client(next_client~=next_client(best)) %Remove client from set of clients
else
%Remove insertion index for this chosen client
[ best_tour ] = improvement( tour ) %Start again improvement and pick next best client from the set of clients
%It can even be the same client with another index
end
else
return best_tour
end
I the code works well which means that a given parameter "tour" is extended to a good solution until no other client can be integrated into this tour without violating constraints. lets call the solution "tour*"
The Problem is that i cannot give the solution back to my main programm!!! i always get back the same solution "tour" that i put in as a parameter although i can see by debugging that there has been created a much better one "tour*"... The strange thing is that when i continue debugging after having got the tour "tour*" then this tour "tour*" is reduced again to the given parameter "tour"...it takes exaclty the same number of steps it took to get from "tour" to "tour*"...so output is the same as the input altough during execution there has been found a much bette rsolution?
i know it has to do with the recursion depth but i dont understand it:( i tried breaking it down to an easy problem like this:
function [ y ] = Improvement_test( x )
y=x
x=x+5;
if y<42
y=improvement_test(x)
end
end
when i execute it with x=20 i get the results: Why is there this 6 times 45 in the end? i just want to have the final solution once and as soon as it is reached i want to break from the rekursion...would be glad to be explained this weird behaviour.
Improvement_test( 20 )
y =
20
y =
25
y =
30
y =
35
y =
40
y =
45
y =
45
y =
45
y =
45
y =
45
y =
45
ans =
45
>>
best regards, John
  댓글 수: 1
Walter Roberson
Walter Roberson 2016년 3월 6일
Note: MATLAB's return is not to be followed by a value . You cannot say what value is to be returned: the value of the function will be according to whatever was set for the output variables.

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by