我正在使用遞歸方法來處理某些矩陣。問題是:當遞歸返回時,這個矩陣的值不能從堆棧中恢復(返回前後的值是相同的)。遞歸:函數無法從堆棧中恢復值
我試圖做一些事情的looooot,但沒有解決它。順便說一句,我已經試圖一步一步地將我的程序與其他人進行比較(從朋友和小作品精心製作),直到遞歸,兩個程序都是平等的。遞歸背影后,只有我的基質是錯誤的...
這裏有一塊我的代碼:
public static Integer [][] Complement(Integer[][] M){
if (OneRowNotEmpty(M)) { // just one row of matrix are different then 0s
return changeSignalLine(M);
}
else {
int row = DefineLineToErase(M);
matrix = Complement(zeraLinha(row, M); // recursion
dosomething();
}
/* make some stuffs, but at this point my M are wrong*/
return finalMatrix; // just for illustrate. this matrix are built in lines after recursion
}
這是用一個例子更容易: 在「A」級,我的基質是:
[ 00 00] (matrix on level "A" of recursion) M = [ 11 10] [ 11 01]
讓我們假設我的擦除行是第二,所以:
[ 00 00] (matrix on level "B" of recursion) M = [ 00 00] [ 11 01]
此時,上水平 「B」,則該函數OneRowNotEmpty(M)爲真,所以它返回下列矩陣:
[ 00 00] (til' here, everything is fine) M = [ 00 00] [-11 -01]
此時,遞歸必須返回到「A」級別的矩陣M並保持計算(doSomething()),但它會返回到級別「B」的矩陣M並繼續計算(doSomething())。問題是:這種計算髮生在錯誤的矩陣中。
這就像遞歸的return語句不存在一樣。我無法理解這一點。
有什麼想法?這是一個難以解釋的問題,但我嘗試過。任何問題,問我。
非常感謝。
你可以發佈編譯的代碼嗎? – Fildor 2014-11-23 21:40:42
http://www.codeshare.io/OUa2M(註釋在葡萄牙語中,錯誤發生在函數deMorgan()之後 - 在我的例子中,deMorgan()等同於changeSignal(),你可以在該行中放置一個斷點) 。 – misc 2014-11-23 21:45:46
遞歸按預期工作。如果您只想在入門級進行一些計算,則需要跟蹤深度。 – Fildor 2014-11-23 21:45:48