c++ - 整数在程序中使用递归算法设置为 -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。
解决方案
你这里有问题:
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 是最后一项的索引。
推荐阅读
- reactjs - 样式化的组件会导致不需要的重新渲染
- symfony - Symfony 4:如何验证用户身份?
- tensorflow - tensorflow v2.0.0-alpha0 在 Windows 10 上构建错误“swif”
- module - 无法在 GNU prolog 中加载 library(readutil) 模块?
- python - pandas read_html - 找不到表
- javascript - 无论如何,我可以将 Excel 文件附加到我的 HTML 或 Javascript 中,用作数据库吗?
- django - 是否可以将多个数据库中的多个 django 查询集合并到一个查询集中?
- r - 更改 x 轴 ggplot2 上的刻度标签
- r - 如何计算列中的重复项?
- shell - foreach 循环中的空值 - TCL - unix 脚本