尾递归函数未由g ++优化

问题描述 投票:0回答:1

我有一个简单的DFS代码来解决“离岛数量”问题,但即使使用G ++ -O2时我虽然是尾递归函数,但仍然会遇到分段错误。

void findneighbors(int i, int j,  int row, int column, vector<vector<char>>& binaryMatrix){
      binaryMatrix[i][j]='0';
      if((i+1)<row && binaryMatrix[i+1][j] == '1'){

        findneighbors(i+1,j, row,column, binaryMatrix);
      }

      if((i-1)>=0 && binaryMatrix[i-1][j] == '1'){
        findneighbors(i-1,j, row,column, binaryMatrix);
      }

      if((j+1)<column && binaryMatrix[i][j+1] == '1'){
        findneighbors(i,j+1, row,column, binaryMatrix);
      }

      if((j-1)>=0 && binaryMatrix[i][j-1] == '1'){
        findneighbors(i,j-1, row,column, binaryMatrix);
      }
}

int numIslands(vector<vector<char>>& binaryMatrix) {
      int count = 0;
      for(int i = 0; i<binaryMatrix.size(); i++){
        for(int j =0; j<binaryMatrix[0].size(); j++){
          if(binaryMatrix[i][j]=='1'){
            findneighbors(i,j,binaryMatrix.size(),binaryMatrix[0].size(),binaryMatrix);
            count++;
          }
        }
      }
    return count;        
}
c++ optimization g++ tail-recursion
1个回答
0
投票

这是关于尾递归的部分答案。为了进行尾递归优化,最后一条语句应该是递归调用。看到这个post

// An example of tail recursive function 
void print(int n) 
{ 
    if (n < 0)  return; 
    cout << " " << n; 

    // The last executed statement is recursive call 
    print(n-1); 
} 

示例来自geeksforgeeks,请参见上面的链接。

© www.soinside.com 2019 - 2024. All rights reserved.