【发布时间】:2020-03-10 22:30:45
【问题描述】:
这是 edX.org 上 CS50 课程的 PSET 3。
我已经为这个问题苦苦挣扎了很长时间;特别是,我无法让 binarySearch 函数工作。我不断收到分段错误,我不知道如何处理它。我花了很多时间思考这个问题,但我没有看到它。
这是我的代码。有人可以从概念上指出我在这里歪斜的地方吗?谢谢。
#include <stdio.h>
#include <cs50.h>
bool binarySearch(int value, int values[], int min, int max)
{
bool answer = false;
if (max < min)
{
answer = false;
}
else if (values[max] == value)
{
answer = true;
}
else if (values[min] == value)
{
answer = true;
}
else
{
int midPoint = (max + min) / 2;
if (values[midPoint] == value)
{
answer = true;
}
else if (values[midPoint] > value)
{
answer = binarySearch(value, values, min, midPoint);
}
else
{
answer = binarySearch(value, values, midPoint, max);
}
}
return answer;
}
int main (int argc, char *argv[])
{
int value = 34;
int values[] = {11,22,33,44,55,66,77,88,99,1010};
int max = sizeof(values) / sizeof(int);
if (binarySearch(value, values, 0, max - 1))
{
printf("Found needle!\n");
}
else
{
printf("Did not find needle\n");
}
}
当我要搜索的值不在数组中时,我不断收到分段错误。
【问题讨论】:
-
已经很晚了,我的大脑正在关闭。在查看您的代码时,“int max = sizeof(values) / sizeof(int);”这一行可能存在问题您可能希望 'printf("max[%d]\n", max);'并验证它是否打印出您期望的内容(即:10 ?)。
-
为什么不使用
while的简单迭代?它比递归更简单、更快、更安全…… -
@Mahonri - 我之前确实这样测试过;它提出了正确的最大尺寸。
-
@CiaPan,我无法概念化 while 循环的编码方式......