gpt4 book ai didi

c++ - 数组递归;无法获得正确的返回值

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:14:30 25 4
gpt4 key购买 nike

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

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

递归解决方案:不起作用!解释:一个整数,时间,被传递到函数中。然后它用于结束 FOR 语句 ( counter<time )。 IF 部分 ( time == 0 ) 提供了递归应该终止并返回 0 的基本情况。 ELSE 部分是递归调用发生的地方:total 是头文件中定义的私有(private)变量,在其他地方。它在其他地方的构造函数中初始化为 0。该函数递归地调用自身,添加 productsAndSales[time-1][0]总计,一次又一次,直到碱基 check out 。然后返回总数,稍后打印出来。好吧,这正是我所希望的。

我想象会发生的是,我会将数组这一列中的所有值相加,然后返回值并打印出来。相反,如果返回 0。如果我将 IF 部分设置为“返回 1”,我注意到它返回 2 的幂,无论时间是什么值。 EG:时间= 3,它返回2*2 + 1。如果时间= 5,它返回2*2*2*2 + 1。

我不明白为什么它没有返回我期望的值。我想到的一件事是,我试图在返回部分中使用私有(private)变量 total 以及递归调用……也许这是一个禁忌?

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

迭代解决方案:有效!解释:一个整数,时间,被传递到函数中。然后它用于结束 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;
}

最佳答案

不要使用全局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 ]);
}
}

现在也是尾递归了。

关于c++ - 数组递归;无法获得正确的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2456308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com