Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试获取数组的和';元素递归 我试图在C++上递归地找到数组元素的和。 #包括 使用名称空间std; int findSum(int arr[],int b,int e) { 如果(b==e) 返回arr[b]; 其他的 { int mid=(b+e)/2; int x=findSum(arr,b,mid); int y=findSum(arr,mid,e); 返回x+y; } } int main() { int arr[]={1,6,3,10,11,4,5,9,15,2}; CUT< P>试图在C++中递归地做任何事情是危险的。YOUT程序可能会有堆栈溢出的风险,因为它有一个函数填充堆栈的多个副本,每次调用它时都会变大。_C++_Arrays_Segmentation Fault - Fatal编程技术网

尝试获取数组的和';元素递归 我试图在C++上递归地找到数组元素的和。 #包括 使用名称空间std; int findSum(int arr[],int b,int e) { 如果(b==e) 返回arr[b]; 其他的 { int mid=(b+e)/2; int x=findSum(arr,b,mid); int y=findSum(arr,mid,e); 返回x+y; } } int main() { int arr[]={1,6,3,10,11,4,5,9,15,2}; CUT< P>试图在C++中递归地做任何事情是危险的。YOUT程序可能会有堆栈溢出的风险,因为它有一个函数填充堆栈的多个副本,每次调用它时都会变大。

尝试获取数组的和';元素递归 我试图在C++上递归地找到数组元素的和。 #包括 使用名称空间std; int findSum(int arr[],int b,int e) { 如果(b==e) 返回arr[b]; 其他的 { int mid=(b+e)/2; int x=findSum(arr,b,mid); int y=findSum(arr,mid,e); 返回x+y; } } int main() { int arr[]={1,6,3,10,11,4,5,9,15,2}; CUT< P>试图在C++中递归地做任何事情是危险的。YOUT程序可能会有堆栈溢出的风险,因为它有一个函数填充堆栈的多个副本,每次调用它时都会变大。,c++,arrays,segmentation-fault,C++,Arrays,Segmentation Fault,因此,以下是您可以迭代执行的方法: long int findsum(const int array[], int elementstart, int elementend) { long int summedArray = 0; for (int currentcell = elementstart; currentcell <= elementend; ++currentcell) summedArray += array[currentcell];

因此,以下是您可以迭代执行的方法:

 long int findsum(const int array[], int elementstart, int elementend) {
    long int summedArray = 0;
    for (int currentcell = elementstart; currentcell <= elementend; ++currentcell)
        summedArray += array[currentcell];
    return summedArray;
 }
long int findsum(常量int数组[],int元素开始,int元素结束){
长整数总和数组=0;

对于(int CurrnCys= EntEngEngEnter;CurrutCys

),在C++中递归地做任何事情都是危险的。YOUT程序可能会有堆栈溢出的风险,因为它有一个函数填充堆栈的多个副本,每次调用它时都会变大。 因此,以下是您可以迭代执行的方法:

 long int findsum(const int array[], int elementstart, int elementend) {
    long int summedArray = 0;
    for (int currentcell = elementstart; currentcell <= elementend; ++currentcell)
        summedArray += array[currentcell];
    return summedArray;
 }
long int findsum(常量int数组[],int元素开始,int元素结束){
长整数总和数组=0;

对于(int currentcell=elementstart;currentcell,代码中的问题已在


无论如何,这里有一个简单的递归解决方案,用于对集合的元素求和:

您可以保留一个变量,告诉您当前正在考虑的数组索引,当该索引大于数组大小时,您可以返回
0
,即sum的中性元素

否则,只需将
arr[i]
求和为数组的剩余部分的和

int findSum(const int arr[], const int i, const int size)
{
    if(i > size)
        return 0;
    return arr[i]+findSum(arr, i+1, size);
}

我发现这更容易理解=)

代码中的问题已经在


无论如何,这里有一个简单的递归解决方案,用于对集合的元素求和:

您可以保留一个变量,告诉您当前正在考虑的数组索引,当该索引大于数组大小时,您可以返回
0
,即sum的中性元素

否则,只需将
arr[i]
求和为数组的剩余部分的和

int findSum(const int arr[], const int i, const int size)
{
    if(i > size)
        return 0;
    return arr[i]+findSum(arr, i+1, size);
}

我发现更容易理解=)

您的函数不正确。例如,如果数组只有一个元素,则函数返回0

除此之外,如果数组包含两个元素,则传递索引b=0,e=1。然后中间的索引等于0((b+e)/2==0),并且再次递归调用具有相同值b=0和e=1的函数。因此存在无限递归

您应该将范围指定为[开始索引,最后一个之后的索引]

但在任何情况下,函数都可以编写得更简单。Ywo索引是冗余的

下面是一个演示程序,演示如何编写函数

#include <iostream>

long long int findSum( const int a[], size_t n )
{
    return 
    n == 0 ? 0 
           : ( n == 1 ? *a 
                      : findSum( a, n / 2 ) + findSum( a + n / 2, n - n / 2 ) );
}

int main() 
{
    int arr[] = { 1, 6, 3, 10, 11, 4, 5, 9, 15, 2 };
    const size_t N = sizeof( arr ) / sizeof( *arr );

    std::cout << findSum (arr, N ) << '\n';

    return 0;
}

您的函数不正确。例如,如果数组只有一个元素,则函数返回0

除此之外,如果数组包含两个元素,则传递索引b=0,e=1。然后中间的索引等于0((b+e)/2==0),并且再次递归调用具有相同值b=0和e=1的函数。因此存在无限递归

您应该将范围指定为[开始索引,最后一个之后的索引]

但在任何情况下,函数都可以编写得更简单。Ywo索引是冗余的

下面是一个演示程序,演示如何编写函数

#include <iostream>

long long int findSum( const int a[], size_t n )
{
    return 
    n == 0 ? 0 
           : ( n == 1 ? *a 
                      : findSum( a, n / 2 ) + findSum( a + n / 2, n - n / 2 ) );
}

int main() 
{
    int arr[] = { 1, 6, 3, 10, 11, 4, 5, 9, 15, 2 };
    const size_t N = sizeof( arr ) / sizeof( *arr );

    std::cout << findSum (arr, N ) << '\n';

    return 0;
}

此分区中的存储模块(在其中进行分区)需要彻底检查。你有一个小数据集。拿一张纸和一支铅笔,在树上逐行画出每次递归的具体情况。然后,在调试器中单步确认或攻击你的论文结论。顺便问一下,你为什么要使用如此复杂的方式递归求和元素?为什么不简单:
findSum(arr,i+1)
@DavideSpataro,你能用一些代码解释一下这个(你正在分区的)存储模块吗需要彻底检查。你有一个小数据集。拿一张纸和一支铅笔,在树上逐行画出每次递归的具体情况。然后,在调试器中单步确认或攻击你的论文结论。顺便问一下,你为什么要使用如此复杂的方式递归求和元素?为什么不简单:
findSum(arr,i+1)
@DavideSpataro,你能用一些codefs解释一下吗,如果我们走那条路,为什么不直接用
std::cout想到那条路呢回答是因为他在评论中明确要求它。这不是问题作者使用的方法。@Vladfrommoskow我只是把它作为一个答案,因为他在评论中明确要求它。不要真的喜欢
return
,想想
中的3个单独的
return
staments,如果
块更简单的话眼睛。不管怎样,投了赞成票-回答得很好!不要真的喜欢
return
,想想
中3个独立的
return
staments,如果
块对眼睛来说更容易。不管怎样,投了赞成票-回答得好!