1

나는 주어진 0128 행렬에서 찾은 psuedocode을 사용하여 일부 n * n 행렬이 주어진 특정 경로를 찾는 재귀 적 구현을 ​​작성했습니다. (매트릭스로 인접 셀에 셀 매트릭스) 다른 우리 그래프에서 하나 개의 정점으로부터가는 에지 값 우리 경로의 각 인덱스 직접 호출자에게 재귀 함수가 반환되지 않음

  • 인접성 배열을 보유

    1. 경로 중량 어레이 : I 두 배열을 구성했다 가중치 배열

    내 재귀 함수가 반환하는 이유는 무엇입니까? 즉각적인 호출자에게 반환되지 않습니다.

    내 구현 : 다음 줄

     // find paths of specific length from our starting cell 1,1 
         // when a path is found print it 
         // otherwise return? 
         function findPaths(adjMatrix, pathW_array, path, pathWeight, x, y, idx, curpath_idx){ 
          // set curpath to the current path (an array with storing path weight values) 
          var curpath = path; 
          // tempArray with store pathW_array (set cell value to -1 if value has been added to curpath) 
          var tempArray = pathW_array; 
    
          // curValue retruns sum value of our curpath 
          if ((curValue(curpath) == pathWeight) && (Object.keys(curpath).length !=1)){ 
           for(i = 0; i < Object.keys(curpath).length; i++){ 
            console.log(curpath[i]); 
           } 
           return; 
          }if(tempArray[x][y] == -1){ 
           return; 
          }if(curValue(curpath) > pathWeight){ 
           return; 
          } 
    
          // Did not return, add current cell value to curpath array 
          curpath[curpath_idx] = tempArray[x][y]; 
          curpath_idx = curpath_idx + 1; 
          // set current cell value in tempArray to -1 because we've added it to current path (do not want to add same cell value multiple times) 
          tempArray[x][y] = -1; 
    
          // iterate until i = pathWeight -1 
          for(var i = 0; i < pathWeight; i++){ 
           if(adjMatrix[idx][i] != -1){ 
            // get pathW_array indices for next neighbor cell of current element 
            arrayIndices = neighbor_value(adjMatrix, tempArray, idx); 
            x = arrayIndices[0]; 
            y = arrayIndices[1]; 
            adjMatrix[idx][i] = -1; 
            idx = adjMatrix_idx(x,y); 
    
            // findpaths from the next cell in the matrix 
            findPaths(adjMatrix, tempArray, curpath, pathWeight, x, y, idx, curpath_idx); 
            curpath.pop(); 
            curpath_idx = curpath -1; 
           } 
          } 
         } 
    
  • 답변

    0

    변경 : 함수의 복잡성의 나머지 부분을 이해하지 않고

    findPaths(adjMatrix, tempArray, curpath, pathWeight, x, y, idx, curpath_idx) 
    

    return findPaths(adjMatrix, tempArray, curpath, pathWeight, x, y, idx, curpath_idx) 
    

    방법이 '해야'복귀 재귀 반환 값은 호출 스택을 위로합니다.