c++ - 递归调用以获取带有前缀或后缀参数的 arr 元素的总和

标签 c++ arrays windows recursion

<分区>

我有两段代码来获取 arr 元素的总和:

1.

int sum1(int arr[], int size)
{
    if(size<0)
    {
        return 0;
    }
    else
    {
        return arr[size] + sum(arr, size-1);
    }
}

2.

int sum2(int arr[], int size)
{
    if(size<0)
    {
        return 0;
    }
    else
    {
        return arr[size] + sum(arr, --size);
    }
}

第一个给了我正确的答案,但第二个给出了一些垃圾。 唯一的区别是,在第二个,我通过了 --size,但在第一个,我通过了 size-1。

即使我通过像 size-- 这样的后递减,我也不知道它们之间有什么区别,它会崩溃。

所以有人请帮助我理解这个问题,我可以理解在后递减的情况下它总是传递相同的值(数组的原始大小),所以它进入循环。

但是预递减的问题是什么,我调试了代码但无法弄清楚,因为在这两种情况下递归调用的循环计数是相同的,并且两种情况下所有调用中的大小值都是相同的。

最佳答案

return arr[size] + sum(arr, --size); 是 UB,因为 arr[size] 之间没有序列点- -尺寸

关于c++ - 递归调用以获取带有前缀或后缀参数的 arr 元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32422849/

相关文章:

python - 如何在 Windows 64 位平台上的 python 2.5 中终止进程?

windows - 在 IIS 下运行 SVN 存储库

c++ - 交换可整除的数字并获得声明为无效的错误

css - 为不同的操作系统分配不同的字体

C++在特定行号的文件中插入一行

c - 具有未知大小的结构数组的结构

java - 将字符串文件作为整数读取到数组中?

arrays - 对结构数组执行数组函数

c++ - 从STL容器继承

c++ - allocate_shared 是如何工作的?