gpt4 book ai didi

c++ - boolean 递归函数总是返回真

转载 作者:行者123 更新时间:2023-11-30 01:37:51 25 4
gpt4 key购买 nike

我正在使用递归进行作业。我似乎无法弄清楚为什么当数字不在数组中时我的函数不会返回 false。出于某种原因,在我看来,正在搜索的数字正在添加到数组中。如果有人能告诉我哪里出错了,将不胜感激。

#include "stdafx.h"
#include <iostream>

using namespace std;

bool isMember(int[], const int, int);

int main() {

const int SIZE = 5;
int myArr[SIZE];
int numSearched;

cout << "Enter 5 numbers to be searched through." << endl;

for (int i = 0; i < SIZE; i++) {
cout << "Enter number " << i + 1 << endl;
cin >> myArr[i];
}

cout << "What number do you want to find?" << endl;
cin >> numSearched;

if (isMember(myArr, SIZE, numSearched)) {
cout << "True" << endl;
}
else {
cout << "False" << endl;
}

return 0;
}

bool isMember(int arr[], const int S, int search) {
bool found = false;

cout << arr[S] << endl;

if (arr[S] == search) {

found = true;
return found;
}
else if ((arr[S] == 0) && (arr[0] != search)) {

return found;
}
else {

return isMember(arr, S - 1, search);
}
}

最佳答案

许多人指出,当您试图访问超出数组大小的内存时,您会遇到内存访问问题。已经在函数的顶层调用中,由于将 SIZE 作为数组索引参数传递,因此导致了问题。如果 SIZE 是数组的大小,则 arr[SIZE-1] 是内存中数组的最后一个元素。 arr[SIZE] 是超出末尾的一个元素。访问超过数组内存占用量的内存会导致未定义的行为,这是不好的。

总的来说,糟糕的索引是这里的一个大问题。但即使您解决了上述问题,另一个问题行也在这里,因为您试图在 S 达到 0 时停止,但您写错了。

else if ((arr[S] == 0) && (arr[0] != search)) {

你希望它是:

else if (S == 0) {

语句 arr[0] != search 是多余的,因为它上面的条件已经检查过了。原始语句 arr[S] == 0 试图将 S 处的 arr 的值与 0 进行比较,而不是测试您的索引变量现在是 0,这是我建议的代码。

但这也可能解释了为什么函数总是返回 true,尽管有未定义的行为并且程序没有崩溃。因为您的函数没有正确终止,它会不断调用 isMember(...,S-1,...)。因此,它将不断减少索引并更改访问的 arr[S] 的内存位置。此过程将继续进行,直到找到 arr[S] == 0 或找到您要查找的值。在遇到 0 之前,您偶然在内存中的某个地方遇到了目标值。

关于c++ - boolean 递归函数总是返回真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48937947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com