使用for循环递归地乘以数组中的元素

时间:2013-11-10 01:21:28

标签: c++ arrays for-loop recursion

我正在编写一个程序,它将2D数组中的元素与以下行中的元素相乘。我有一个递归方法,首先遍历2D数组的每一行,找到除0以外的数组值的位置,然后获取该值并将其与递归调用相乘以在数组的下一行上运行该函数。 问题是递归的值在for循环有机会移动到行中的下一个元素之前返回。我知道这是在递归调用之前放置return语句的结果。但是如果我取出return,那么从total()返回的整数实际上是关闭的(通常为0)。

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 个答案:

答案 0 :(得分:1)

在这种情况下,函数将在条件

之后立即返回值
    if(array[current][i] != 0)

是真的。 因此,将为第一列计算值,例如

    array[current][column] != 0

但我并不清楚你的算法。

我也看到,当函数超出行数时,递归中没有退出点。 您还应该添加条件,在本例中为

    if (current >= 10) return something;

查看算法概念的更多细节会很有用,这对我来说不够清楚(也许,我只是看不到什么)。