我正在编写一个程序,它将2D数组中的元素与以下行中的元素相乘。我有一个递归方法,首先遍历2D数组的每一行,从第二行(array [1] [])开始,找到除0以外的数组值的位置,然后获取该值并将其乘以递归调用以在数组的下一行上运行该函数。我的问题是,当我运行该函数并传入1,2和3x3数组作为参数时,其中数组[1] [2]和数组[2] [0]中的数组包含2,返回0从我预期的函数4.我认为(slopeArray [current] [i]),这是2,应该与基本情况相乘,也应该是2.用手写出一切,它看起来像它应该返回4.
int total(int current, int totalCont, int array[3][3]){
//find the elements in the array that do not contain 0
for(int i=0; i<3; i++){
if(array[current][i] != 0){
//base case
if(current == totalCont){
return array[current][i];
}
//recursive case
else{
(array[current][i]) * (total(current+1, totalCont, array));
}
}
}
}
答案 0 :(得分:2)
您需要向return
添加else
:
return array[current][i] * total(current+1, totalCont, array);
^^^^^^
你的功能逻辑对我来说并不完全清楚。您是否也想修改数组?
答案 1 :(得分:1)
return
分支中既没有else
也没有分配。事实上,你的函数只是忽略了乘法的结果(它没有在任何地方使用)。
简单地添加return
不会解决问题,因为您可能希望将所有三行都相乘。