【问题标题】:Recursively multiply elements in array using a for loop使用for循环递归地将数组中的元素相乘
【发布时间】:2013-11-10 09:46:19
【问题描述】:

我正在编写一个程序,它将二维数组中的元素与以下行中的元素相乘。我有一个递归方法,它首先遍历二维数组的每一行,找到不是 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));

      }
    }
  }
}

【问题讨论】:

    标签: c++ arrays for-loop recursion


    【解决方案1】:

    在这种情况下,函数将在条件之后立即返回值

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

    是真的。 因此,将为第一列计算值,这样

        array[current][column] != 0
    

    但我不清楚你的算法。

    我还看到,当函数超出行数时,递归中没有退出点。 您还应该添加一个条件,在这种情况下像

        if (current >= 10) return something;
    

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

    【讨论】:

    • 在我的算法中,有几个元素我没有相乘,如果有一个元素恰好有一个不是 0 的整数并且在 i==0 时出现,则返回为基本情况。我认为这不会影响 for 循环在找到除 0 以外的数字后不会移动到一行中的下一个元素的问题。
    • 您只能按行进行递归。算法不能在 row != 0 中的元素之后移动任何地方,因为在这种情况下它只是返回值。但我真的不明白,你期待的函数调用结果是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多