我試圖用遞歸來總和n個矩陣的周長。 (沒有多次加角)總和矩陣的周長而不多次添加角落
我寫的是一個無限循環,並不排除角落。如何停止無限循環並排除角落?
int
sumPerimeter(int** matrix, int i, int j, int height, int width)
{
if (i == 0 && j == 0)
return matrix[i][j] + sumPerimeter(matrix, i + 1, j, height, width);
if (i == height && j == 0)
return matrix[i][j] + sumPerimeter(matrix, i, j + 1, height, width);
if (i==height&& j == width)
return matrix[i][j] + sumPerimeter(matrix, i - 1, j, height, width);
if (i == 0 && j == width)
return matrix[i][j] + sumPerimeter(matrix, i, j - 1, height, width);
}
我決定把這個分成幾個階段,以使它更容易,下面的代碼是我目前的嘗試。當我使用視覺工作室瀏覽它時,它會工作,但它總是返回矩陣中的第一個數字。
int
sumRight(int** matrix, int i, int j, int height, int width,int count)
{
if (0 > width)
return 0;
if (j > width - 1)
return count;
int sum = matrix[i][j];
count = sum + count;
sumRight(matrix, i, j + 1, height, width,count);
return count;
}
我想通了它爲什麼沒有返回正確的值。但我不知道如何讓它不會多次計算角落。任何意見,將不勝感激。
你必須使用遞歸嗎? – syntagma 2014-12-04 23:35:13
與所有遞歸方案一樣,您需要一個或多個可以計算答案而無需遞歸的基本情況,並且需要確定遞歸情況。在我看來,使用迭代比遞歸更容易。如果你使用遞歸,在初始調用中'i'和'j'的值是多少?假設它們是(0,0);那麼你的代碼將與(1,0)遞歸,但除非height爲1,遞歸情況不會在函數中執行任何事情;它甚至不會像它應該的那樣返回一個值。在你面前你有很多想法。 – 2014-12-04 23:45:38
是的,我必須使用遞歸。 – 2014-12-04 23:58:56