使用数组递归; 无法获得正确的回报价值

Azo*_*reo 1 c++ arrays recursion return

找到解决方案 - 在5分钟内,感谢大家!

澄清:我的数组的内容是值0-29.所以数组[0] [0] = 0,而数组[29] [0] = 29 ---它们只是测试值.此外,我有一个潜在的解决方案,已经多次发布,将尝试.

递归解决方案:不工作! 说明:将整数time传递给函数.然后它用于提供FOR语句(counter<time)的结束.IF section(time == 0)提供了一个基本情况,递归应该终止,返回0. ELSE部分是递归调用发生的地方:total是头文件中定义的私有变量,在别处.它在其他地方的构造函数中初始化为0.该函数productsAndSales[time-1][0]以递归方式调用自身,再次添加到total,直到基本调用.然后返回总数,然后打印出来.好吧,无论如何,这就是我所希望的.

我想象的是,我会在数组的这一列中添加所有值,并返回值并打印出来.相反,如果返回0.如果我将IF部分设置为"返回1",我注意到它返回2的幂,对于任何值时间.EG:时间= 3,返回2*2 + 1.如果时间= 5,则返回2*2*2*2 + 1.

我不明白为什么它没有返回我期待的价值.我想到的一件事是我试图在返回部分使用私有变量total,以及递归调用...也许这是不可能的?

int CompanySales::calcTotals( int time )
{
  cout << setw( 4 );
  if ( time == 0 )
   {
    return 0;
   }
  else
   {
    return total += calcTotals( productsAndSales[ time-1 ][ 0 ]);
   }
}
Run Code Online (Sandbox Code Playgroud)

迭代解决方案:工作! 说明:将整数time传递给函数.然后它用于提供FOR语句(counter<time)的结束.FOR语句循环遍历数组,将一列中的所有值一起添加.然后返回该值(以及程序中的其他位置,打印出来).完美的工作.

int CompanySales::calcTotals( int time )
{
 int total = 0;
 cout << setw( 4 );

 for ( int counter = 0; counter < time; counter++ )
 {
  total += productsAndSales[counter][0];
 }
 return total0;
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*ger 6

不要使用全局total,使其成为一个参数.

int totals = calcTotals(time-1, 0); // Call it starting at the end, 
                                    // so we don't have to pass along the `time`


int CompanySales::calcTotals( int counter, int total )
{
  if ( counter == 0 ) {
    return total;
  }
  else {
    return calcTotals(counter - 1, total + productsAndSales[counter][ 0 ]);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在它的尾部也是递归的.