【发布时间】:2013-12-15 02:00:14
【问题描述】:
好的,所以我得到了这个功能
int bin(int value, int size, int array[])
我应该在“array[]”中找到“value”,但这里的问题是,在大多数情况下,我们有一些类似于
int bin(int value, int max, int min, int array[])
从逻辑上讲,这部分的递归要容易得多,因为我仍然可以传递我所在的数字,并记住数组的大小。
int bin(int array[], int value, int min, int max)
{
if(max < min)
return -1;
else
{
int mid = min + (max - min)/2;
if(array[mid] > value)
return bin(array, value, min, mid-1);
else if(array[mid] < value)
return bin(array, value, mid+1, max);
else
return mid;
}
但由于我只能传递 1 个整数,我该如何调整这个算法呢? 从本质上讲,我只能做这样的事情,但我知道这在逻辑上是行不通的。不过,有没有办法让我看到数组的大小?我试过了,但数字不正确。
int bin(int array[], int value, int size)
{
int mid = size/2;
if(array[mid] > value)
return bin(array, value, size-(size/2));
else if(array[mid] < value)
return bin(array, value, size+(size/2));
else
return mid;
}
【问题讨论】:
-
请调整您的“家庭作业”等标签;你的限制听起来确实像那样。提示:在 C 中,数组实际上是指向底层数据类型的指针。因此,您可以将计算出的参数“数组”传递给函数。
-
@Adriaan:数组不是指针。数组就是数组。但是,您不能将数组作为函数参数传递,并且在这种情况下,数组会衰减为指向第一个元素的指针。不过,这不会改变数组的性质。
标签: c recursion binary-search