首页 > 解决方案 > 整数在程序中使用递归算法设置为 -858990820 - 我有点明白为什么,但不确定

问题描述

我的程序应该构建一个数字(在参数中),该数字是用数组k中的每个偶数数字获得的。是数组的元素个数。a[]n

void F (int n, int a[], int &k) {
    if (n == 0)
    {
        if (a[0] % 2 == 0)
        {
            k = a[0];
        }
        else
        {
            k = -1;
        }
    }
    else
    {
        F(n - 1, a, k);
        if (a[n] % 2 == 0)
        {
            k = k * 10 + a[n];
        }
    }
}

顺便说一句,我不擅长递归。这可能不是一个好的算法。我正在努力变得更好。

问题如下:如果我cout k,它显示我-858990820。

如果我在 else 条件下使用 cout k 来查看发生了什么,结果很好,直到某个时候它突然变成那个负数。

[输出

我认为这个数字出现是因为数组。它在某些时候超出了界限,但我不知道什么时候。

在 else 条件开始时调用F(n-1, a, k)应该可以解决这个问题。(因为数组在 n-1 处停止,如果我在 else 条件中将其称为其中的第一件事,则它不应该达到 n)。

你能向我解释发生了什么并帮助我解决它吗?

////编辑:我忘了说:如果没有偶数,k等于-1。

标签: c++algorithm

解决方案


你这里有问题:

    else
    {
        F(n - 1, a, k);
        if (a[n] % 2 == 0)
        {
            k = k * 10 + a[n];
        }
    }

如果您对该函数的初始调用是:

int a[10];
F(100, a, &k);

然后访问a[n]将访问a[10],这超出了数组的分配范围。请记住,在 C 中,数组索引是 0 到 n;在这种情况下,9 是最后一项的索引。


推荐阅读