gpt4 book ai didi

c++ - 递归求平方根和

转载 作者:行者123 更新时间:2023-11-27 23:37:00 26 4
gpt4 key购买 nike

我试图递归地求出两个数组的平方根和。基本给出:

array1 = {1,5,8};
array2 = {2,9,10};
RSS = sqrt((1-2)^2 + (2-5)^2 + (3-8)^2) = 4.58258

我已经实现了下面的代码,但是经过测试我知道它不起作用。我每次都返回平方根,所以我的 RSS 值低于应有值。

double findRSS(int* array1, int* array2, int size){
double sum = 0;
if (size <= 0){
return 0; }
else{
sum = pow((array1[size-1] - array2[size-1]), 2);
sum = sum + findRSS(array1, array2, size-1);
}
return sqrt(sum);
}

对于上面的示例,我返回的是 2.85011。

我觉得我很接近,但只是有一个小问题。有人可以帮帮我吗?

最佳答案

你正在计算 sqrt((1-2)^2 + sqrt((2-5)^2 + sqrt((3-8)^2)))你可以通过对递归结果进行一次平方来对你的逻辑做一些简单的“修复”

double findRSS(int* array1, int* array2, int size){
double sum = 0;
if (size <= 0){
return 0; }
else{
sum = pow((array1[size-1] - array2[size-1]), 2);
sum = sum + pow(findRSS(array1, array2, size-1), 2); // you are undoing sqrt for new one
}
return sqrt(sum);
}

但如您所见,该方法存在缺陷。这是为什么结构化开发很重要的一个很好的例子。您可以在此处找到开发人员发现的经久不衰的原则:http://www.catb.org/~esr/writings/taoup/html/ch01s06.html

所以你的方法会变成这样:

double diffSum(int* array1, int* array2, int size, int power) {
double sum = 0;
if (size <= 0) {
return 0;
}
else {
sum = pow((array1[size - 1] - array2[size - 1]), power);
sum = sum + diffSum(array1, array2, size - 1, power);
}
return sum;
}

double findRSS(int* array1, int* array2, int size) {
return sqrt(diffSum(array1, array2, size, 2));
}

成功的关键在于何时知道您需要分开;注意保持方法行数较少有助于维护代码

关于c++ - 递归求平方根和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58527630/

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