2013-11-10 32 views
1

我正在編寫一個程序,它將二維數組中的元素與下列行中的元素相乘。我有一個遞歸方法,首先遍歷二維數組的每一行,找到除0之外的數組值,然後將該值與遞歸調用相乘,以在數組的下一行上運行該函數。 問題是,在for循環有機會移動到行中的下一個元素之前,遞歸值正在返回。我知道這是在遞歸調用之前放置return語句的結果。但是,如果我取出return,那麼從total()返回的整數實際上是關閉的(通常爲0)。使用for循環遞歸地將數組中的元素相乘

int total(int current, int totalCont, int array[10][10]){ 

    //find the elements in the array that do not contain 0      
    for(int i=0; i<10; i++){ 
    if(array[current][i] != 0){ 

     //base case                    
     if(i == 0){ 
     return array[current][i]; 
     } 

     //recursive case                   
     else{ 
     return (array[current][i]) * (total(current+1, totalCont, array)); 

     } 
    } 
    } 
} 

回答

1

在這種情況下功能將在條件

if(array[current][i] != 0) 

是真的後立即返回值。 所以此值將被計算爲第一列,這樣

array[current][column] != 0 

但我並不清楚讓你的算法的思想。

另外我看到,當函數超出行界限時,遞歸中沒有退出點。 您還應該添加一個條件,在這種情況下,像

if (current >= 10) return something; 

這將是有益的看到算法,這是不適合我(也許,我只是不想看到的東西不夠清晰的想法的更多細節)。

+0

在我的算法中,有幾個元素不會相乘,並且如果有一個元素恰好具有非0的整數,並且在i == 0時出現,則返回基本大小寫。我不認爲這會影響for循環在找到0以外的數字後不移動到連續的下一個元素的問題。 – Kalmar

+0

只有行纔有遞歸。 算法不能在元素在行!= 0之後的任何地方進一步移動,因爲在這種情況下它只返回值。 但我其實真的不明白,你所期望的函數調用的結果。 –