关于递归函数中if和if else,以及递归函数的返回值

有哪位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可以解答一下。

首先啊,
if() else if() 执行的情况跟 if(); if();是不一样的;
您所用的添加 else之后,能够保证您的三个判断执行仅1个,但不加上else if时,那么判断完第一个逻辑,那还是有可能进入第二块逻辑的;

可能说的有点乱,可以举个例:

int a > 0;
if(a > 0)  a = 0;

if(a <= 0) printf("a");

这种模式下,执行逻辑可能被代码体打乱的。
但是下面这种就不会了

int a > 0;
if(a > 0)  {a = 0;}
else if(a <= 0) printf("a");

希望能够帮到您!

加上当然不一样,加上也就是说匹配第一个就不会匹配下面的,不加不管匹配前面都要匹配后面的

123123