gpt4 book ai didi

c++ - 递归地计算满足条件的多个值并返回该数字

转载 作者:行者123 更新时间:2023-11-30 05:13:40 27 4
gpt4 key购买 nike

我需要计算 a 和 b(本例中为 2 和 9)之间的值有多少立方体以 2 和 5 之间的数字结尾。一切都必须通过递归完成。

这段代码的输出是

部分 c = recc = 4327670

这对我来说没有意义。它正确地计算了 n 的值,但是一旦被要求返回它,就返回 0 或 32767,就好像它没有被定义一样。

谁能指出问题所在?

#include <iostream>
#include <string>
using namespace std;
void partb(int a, int b){
if(a<=b){
int p = (a*a*a)%10;
else if(p>=2 && p<=5){
cout<<a*a*a<<" ";
}
partb(a+1, b);
}
}
int recc(int n, int a, int b){
int p = (a*a*a)%10;
if(a>b){
cout<<"recc = " << n << endl;
return n;
}
else if(a<=b){
if(p>=2 && p<=5){
n++;
}
recc(n, a+1, b);
}
}
int partc(int a, int b){
int n = recc(0, a, b);
cout<<endl<< "part c = " << recc(0, a, b) << endl;
return n;
}
int main(){
int n=partc(2,9);
cout << n << endl;
return 0;
}

最佳答案

并非函数中的所有控制路径都会返回一个值,因此在使用返回值时会出现未定义的行为。

现在,函数本身不必要地复杂化这一事实也无济于事。让我们重写它以使用递归的常见做法:

int recc(int a, int b)
{
if (a > b) return 0;
int p = (a*a*a)%10;
int n = (p>=2 && p<=5) ? 1 : 0;
return n + recc(a+1, b);
}

现在你的函数更简单了。递归终止条件就在顶部。然后该函数决定 a 是为计数贡献 1 还是 0。最后,您返回该值加上更小范围的计数。

请注意 return n + recc(a+1, b); 如何将问题分解为一个简单的本地解决方案,并结合缩小范围的递归结果。

调用也变得更简单,因为您不再需要传入冗余参数:

int partc(int a, int b)
{
int n = recc(a, b);
cout << endl << "part c = " << n << endl;
return n;
}

关于c++ - 递归地计算满足条件的多个值并返回该数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43838987/

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