二分查找函数控制流图绘制疑问及return语句执行逻辑确认
二分查找函数的控制流图疑问解答
示例代码
int binsearch(int x, int v[], int n) { int low, high, mid; // Line 1 low = 0; high = n - 1; while (low <= high) { // Line 2 mid = (low + high) / 2; // Line 3 if (x < v[mid]) { // Line 4 high = mid - 1; // Line 5 } else if (x > v[mid]) { // Line 6 low = mid + 1; // Line 7 } else return mid; // Line 8 } return -1; // Line 9 }
我的绘图思路
- 前3行初始化代码构成一个基本块,作为控制流图的一个节点
- 当
x < v[mid]为真时,执行high更新后回到while条件判断 - 当
x < v[mid]为假时,检查x > v[mid]:- 若为真,执行low更新后回到while条件判断
- 若为假,执行
return mid退出函数
- 当while条件不成立时,执行
return -1退出函数
核心疑问
return mid(第8行)是否会直接终止函数,不会走到return -1(第9行)?我的理解是前者直接终止函数,此判断是否正确?
解答
你的判断完全正确。在C语言中,return语句的作用是立即终止当前函数的执行,并将指定的返回值传递给函数调用者。一旦第8行的return mid被执行,函数binsearch会立刻结束,后续的代码(包括while循环的剩余部分、第9行的return -1)都不会再被执行。
这也和你绘制控制流图的思路完全契合——return mid是一个终止节点,不会有任何边指向后续的return -1节点。
内容的提问来源于stack exchange,提问作者Hi There
相关产品推荐
相关产品推荐

