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);
}

为什么递归函数一直在循环
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- 不咕鸟会咕咕 2023-02-20 08:49关注
在你的代码中,递归函数 print1 的结束条件是当 l 等于 r 时返回,但是你在每次调用 print1 的时候都将右边界 r 和左边界 l 都输出了一次,这样会导致在 l 和 r 相等的情况下无法结束递归,进而造成死循环。
你可以将 cout 语句放到递归调用之前或之后,或者使用其他的调试手段(如打印日志或使用断点)来验证程序的正确性和调试问题。
另外,注意在计算 mid 时,应该加上括号,否则可能会导致运算优先级错误,例如应该写成 int mid=l+((r-l)>>1); 来确保 + 运算在 >> 运算之前执行。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报