找到解决方案 - 在5分钟内完成,谢谢大家!
澄清:我的数组的内容是值0-29。所以数组[0] [0] = 0,而数组[29] [0] = 29 ---它们只是测试值。此外,我有一个潜在的解决方案,已经多次发布,试试这个。
递归解决方案:无效!
说明:将整数time传递给函数。然后它用于提供FOR语句的结尾(counter<time
)。 IF部分(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 ]);
}
}
迭代解决方案:工作!
说明:将整数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;
}
答案 0 :(得分: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 ]);
}
}
现在它的尾部也是递归的。
答案 1 :(得分:3)
好吧,在你的递归函数中,你期望时间作为函数的参数,但是当你进行递归调用时,它会传递productsAndSales数组的值,而不是我预期的(时间 - 1)
因此,假设productAndSales数组的内容不包含零,则永远不会发生time == 0终止检查
答案 2 :(得分:2)
传递错误的论据:
total += calcTotals( productsAndSales[ time-1 ][ 0 ]);
应该是:
total += productsAndSales[ time ][ 0 ] + calcTotals(time - 1);
答案 3 :(得分:1)
应该是
return total += productsAndSales[time - 1][0] + calcTotals(time - 1);
答案 4 :(得分:1)
这应该产生与迭代函数相同的结果。
int CompanySales::calcTotals( int time )
{
cout << setw( 4 );
if ( time == 0 ){
return 0;
}
else{
return productsAndSales[time-1][ 0 ] + calcTotals( time - 1 );
}
}
答案 5 :(得分:0)
您的递归解决方案中没有任何地方实际添加productsAndSales
值 - 您将这些值作为时间参数传递给calcTotals()
函数。
因此,如果总计从零开始,则只需多次调用此函数,并且不会向其中添加除零之外的任何内容。
答案 6 :(得分:0)
不应该是
int CompanySales::calcTotals( int time )
{
int total = 0;
cout << setw( 4 );
if ( time == 0 )
{
return 0;
}
else
{
return total += productsAndSales[ time ][ 0 ] + calcTotals( time - 1);
}
}