【发布时间】:2022-01-17 17:41:24
【问题描述】:
我正在尝试学习递归,所以我决定实现一些使用递归的算法,如二分搜索,但我有一些问题无法理解为什么我们需要在这样的情况下返回:
int binarysearch(int *arr, int x, int left, int right){
if(right <= left){
return -1;
}
int mid = (left + right) / 2;
if(arr[mid] == x){
return mid;
}
if(x < arr[mid])
return binarysearch(arr, x, left, mid - 1);
else
return binarysearch(arr, x, mid + 1, right);
}
就像我们没有需要返回的值一样,我们需要的唯一值是在参数中,但是当我删除 return 语句时,我得到了一些未定义的行为。有人可以向我解释为什么我在删除时得到了未定义的返回语句。
编辑:
- 此返回声明:
return binarysearch(arr, x, left, mid - 1); - 还有这个:
return binarysearch(arr, x, mid + 1, right);
【问题讨论】:
-
你指的是“return语句”,但是return语句有4个。
-
函数返回数组中找到值的位置
-
@PaulHankin 我编辑问题请检查一下
-
如果你定义一个函数来返回某种数据类型,你必须在每个结束函数执行的分支中使用具有合适值的
return语句。否则你会得到未定义的行为。 -
@Bodo 但在返回时我指定返回什么值?