忘川睡着了zZ 2023-02-20 08:06 采纳率: 66.7%
浏览 41
已结题

为什么递归函数一直在循环

void print1(int num[],int l,int r)
{
    if(l==r)
    {
        return;
    }
  cout << r<< endl;
    cout << l<< endl;
    int mid=l+(r-l)>>1;
    //cout << << endl;
    cout << mid<< endl;
   //print1(num,l,mid);
    print1(num,mid+1,r);
   // sort1(num,l,mid,r);
    
}
  • 写回答

6条回答 默认 最新

  • 不咕鸟会咕咕 2023-02-20 08:49
    关注

    在你的代码中,递归函数 print1 的结束条件是当 l 等于 r 时返回,但是你在每次调用 print1 的时候都将右边界 r 和左边界 l 都输出了一次,这样会导致在 l 和 r 相等的情况下无法结束递归,进而造成死循环。

    你可以将 cout 语句放到递归调用之前或之后,或者使用其他的调试手段(如打印日志或使用断点)来验证程序的正确性和调试问题。

    另外,注意在计算 mid 时,应该加上括号,否则可能会导致运算优先级错误,例如应该写成 int mid=l+((r-l)>>1); 来确保 + 运算在 >> 运算之前执行。

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

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 已采纳回答 2月20日
  • 创建了问题 2月20日

悬赏问题

  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计