2013-08-15 1 views
0

MATLAB에서 셀 배열로 액세스하는 이진 트리가 있습니다 (예 : a{1}{2}). 트리의 모든 프린지 노드에 액세스 할 수있는 재귀 함수 (아래)를 작성할 수있었습니다. 다음으로해야 할 일은 프린지 노드의 값을 다른 값으로 대체하는 것입니다. 그러나 나는이 부분에 어려움을 겪고있다. 재귀 함수가 호출 될 때마다 값은 새로운 값을 유지하지 않고 오리지널 값으로 되돌립니다. 함수에서 값이 업데이트 된 상태인지 확인하는 간단한 방법이 있습니까? 고맙습니다! 매트랩재귀 함수에서 '셀'값 업데이트 문제 (MATLAB)

function findLeaves(a) 
if(iscellstr(a) == 1) % just above fringe node 
     a{2} = 2; %change fringe node to value 2 
    else 

     if(length(a) == 3 || length(a) == 2) % go left 
      findLeaves(a{2}); 
     end 

     if (length(a) == 3) % go right 
      findLeaves(a{3}); 
     end 

    end 

end 

답변

0

, 전달 된 파라미터는 함수의 변경으로부터 보호하는 것을 의미하는 value 기준이다 내장 데이터 타입은 표준 전화 : 여기

코드이다. 예외는 그래픽 핸들, java 핸들 및 handle 클래스 유형을 상속하는 클래스입니다.

따라서 계산 된 값을 유지하려면 변경 결과를 출력으로 전달해야합니다.

function a = findLeaves(a) 

if(iscellstr(a) == 1) % just above fringe node 
    a{2} = 2; %change fringe node to value 2 
else 
    if(length(a) == 3 || length(a) == 2) % go left 
     a{2}=findLeaves(a{2}); 
    end 

    if (length(a) == 3) % go right 
     a{3}=findLeaves(a{3}); 
    end 

end 
+0

중첩 된 호출을 findLeaves로 변경하여 제공된 매개 변수 대신 .a를 업데이트해야한다고 생각합니다. 예 : a = findLeaves (a {2}); a {2} = findLeaves (a {2}) 여야합니다. – grantnz

+0

@ grantnz 나는 당신이 옳았다 고 생각하지만 ... Mandeep은이 시점에서 그것을 해결할 수있다. – Werner

+0

알았어요. 네,이 작품. 감사합니다, 많이 감사드립니다! –