万能的社区请赐我一个昵称吧 2022-11-30 13:06 采纳率: 50%
浏览 72
已结题

关于递归函数中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可以解答一下。

  • 写回答

4条回答 默认 最新

  • dp_shiyu 2022-11-30 13:37
    关注

    首先啊,
    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");
    

    希望能够帮到您!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月8日
  • 已采纳回答 11月30日
  • 创建了问题 11月30日

悬赏问题

  • ¥15 如何在sql server里完成筛选
  • ¥15 请问为什么我配置IPsec后PC1 ping不通 PC2,抓包出来数据包也并没有被加密
  • ¥200 求博主教我搞定neo4j简易问答系统,有偿
  • ¥15 nginx的使用与作用
  • ¥100 关于#VijeoCitect#的问题,如何解决?(标签-ar|关键词-数据类型)
  • ¥15 一个矿井排水监控系统的plc梯形图,求各程序段都是什么意思
  • ¥50 安卓10如何在没有root权限的情况下设置开机自动启动指定app?
  • ¥15 ats2837 spi2从机的代码
  • ¥200 wsl2 vllm qwen1.5部署问题
  • ¥100 有偿求数字经济对经贸的影响机制的一个数学模型,弄不出来已经快要碎掉了