有哪位person看看自定义递归函数中(数组二叉查找法)
代码1:
int Seek(int x, int a[], int m)//1、待查找整数;2、已排好序的数组名;3、数组的元素个数
{
int y;
if (m > 0)
{
y = m / 2 + m % 2 - 1;//y为数组中位数的下标
if (x < a[y])
Seek(x, a, y);
if (x > a[y])
Seek(x, a + y + 1, m - y - 1);
if (x == a[y])
return y;
}
else return 0;
}
和以下代码2:
int Seek(int x, int a[], int m)
{
int y;
if (m > 0)
{
y = m / 2 + m % 2 - 1;//y为数组中位数的下标
if (x < a[y])
Seek(x, a, y);
else if (x > a[y]) //仅仅添加了else
Seek(x, a + y + 1, m - y - 1);
else if (x == a[y]) //仅仅添加了else
return y;
}
else return 0;
}
代码2仅仅只是增加了else,y的值就和函数返回值相一致。而代码1的函数返回值居然和y值毫不相干,实验中发现返回了下标中位数的解引用,为什么?
从逻辑上讲加不加else都是一样的啊,哪位person可以解答一下。