计算双精度数组中所有元素的和
calculate the sum of all element in a double array
我在使用数组做递归有点困惑,有人能纠正我的错误吗?
新更新,根据问题要求部分行不能编辑
double sum_of_array(double x[],int size)
{
static double sum; <---can be edit
int index = 0; <--can be edit
if(index<size){
return sum + sum_of_array(x,size-1); <--can be edit
} else {
something ; <--can be edit
return sum; <--can be edit
}
}
int main(void){
double x[] = {4.5,5.0,6.8};
double y[] = {4.7,3.4,2.5,5.2};
cout<<"Sum X = "<<sum_of_array(x,3)<<endl;
cout<<"Sum Y = "<<sum_of_array(y,4)<<endl;
return 0;
}
输出:Sum of the element in X[]=15.3
Sum of the element in Y[]= 15.8
你在尝试制作一些过度设计的东西。您需要两样东西—边缘情况(递归截止)和一般情况(递归下降)。在你的例子中,边缘情况是"数组大小为零",一般情况是"获取第一个元素并将数组的其余部分递归"。
可以是这样的:
double sum_of_array( double x[], int size )
{
if( size == 0 ) { //this is the edge case
return 0;
}
// here you grab the first element and pass the rest of array into a recursive call
return x[0] + sum_of_array( x + 1, size - 1 );
}
这段代码中有相当多的错误:
- 首先,常数和似乎是无用的。它曾经被用来做什么?
- 第二,你永远不要在你的函数中使用x的内容。
你的递归函数的逻辑是错误的。实际上,您从未读取数组的内容。我很惊讶你从中得到了任何有意义的输出。
你需要重新考虑递归定义来执行这个加法。
基本情况(s):
空数组的和为0.
即sum_of_array(x, 0) == 0.
单元素数组的和是该元素的值。
即sum_of_array(x, 1) == x[0]
递归的例子:
n元素数组的和是第n个元素和前4个n-1
元素的和。
即sum_of_array(x, n) == x[n-1] + sum_of_array(x, n-1)
找出如何在你的函数中编码这个逻辑。
您实际上从未将x[]
和y[]
中的值添加到sum
中,此外,index
始终等于0
。您可能应该将它作为另一个参数传递给函数:
double sum_of_array(double x[], int size, int index)
{
if(index<size){
return x[index] + sum_of_array(x, size, index+1);
}
else {
return 0;
}
}
您实际上不需要sum
变量
问题是您使用的是静态变量sum
而不是x[size - 1]
。在这个时刻展示如何解决这个问题是多余的(7个答案已经这样做了)。但是,这可以用c++内置的功能在一行中完成:
#include <algorithm>
double sum_of_array(double x[], int size)
{
return std::accumulate(x, x + size, 0.);
}
未初始化静态变量sum
我想从这个开始:
return sum + sum_of_array(x,size-1);
你不应该回来吗?
return x[size] + sum_of_array(x,size-1);
除此之外,您应该找到一种方法将sum
在初始调用函数之间设置为零,因为否则它将累加所有数组的总和。
问题是,你从来没有初始化sum
,所以它有一些垃圾。
for
循环就能解决问题时,谁的主意是使用递归 ?这是家庭作业吗? double sum_of_array(double x[],int size)
{
size = size - 1;
if(size < 0){
return 0;
}
return x[size] + sum_of_array(x, size);
}
那么应该是这样的:
double sum_of_array(double x[],int index)
{
int size = sizeof( x) / sizeof( x[0] );
if(index<size){
return x[index] + sum_of_array(x, index + 1);
}
return 0;
}
然后调用
sum_of_array(x,0);
IE总是第一次调用0作为索引
最后一次尝试:
double sum_of_array(double x[], int index, int size)
{
if(index < size){
return x[index] + sum_of_array(x, index + 1, size);
}
else {
return 0;
}
}
然后cout<<"Sum X = "<<sum_of_array(x,0,3)<<endl;
我是这样做的:
double sum_of_array(double x[], int size)
{
if(size == 0){
return 0;
}
else{
return x[--size] + sum_of_array(x, size);
}
}
我希望我还能插话。最近的答案(不包括我的)是2011年的。
这是计算数组中所有元素和的另一种解决方案。
double array_sum(double *p_array, int idx_low, int idx_high){
if(idx_low == idx_high)
return p_array[idx_low];
int idx_mid=idx_low+(idx_high-idx_low)/2;
return array_sum(p_array,idx_low,idx_mid)+array_sum(idx_mid+1, idx_high);
}
对该算法的分析将产生O(n*log(n))
的运行时。但是,您最好对这句话持怀疑态度。
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 检查是否以特定精度给出双精度
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C 字符串返回字符串的整数/双精度/长整型值
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何使双精度值的 C++ 和 C# 中的结果相同
- 使用浮点数和双精度数的非常小数字的数学
- 使用 Xcode 将双精度存储在数组C++中
- 在 C++ 中将双精度变量写入二进制文件
- 如何从字符串转换为双精度*
- 为什么我的数组双精度函数不起作用?
- C++在向量中添加元素的双精度
- C++将双精度中的每个小数点制作成数组元素
- 计算双精度数组中所有元素的和
- 访问映射<整数,对<双精度,双精度>>元素
- 输出一个赋值给c++双精度数组元素的字符串