C语言:递归函数实现二分查找及代码详解
你提供的代码中有一些语法错误和逻辑问题。以下是修正后的代码,实现了递归的二分查找算法: ```c #include <stdio.h> int binary_search_rec(int a[], int left, int right, int target) { if (left > right) { return -1; // 基本情况:未找到目标值 } int mid = left + (right - left) / 2; // 计算中间索引 if (a[mid] == target) { return mid; // 找到目标值,返回其索引 } else if (a[mid] < target) { return binary_search_rec(a, mid + 1, right, target); // 在右半部分继续查找 } else { return binary_search_rec(a, left, mid - 1, target); // 在左半部分继续查找 } } int main() { int a[7] = {0, 1, 2, 3, 5, 6, 7}; for (int num = 0; num < 8; num++) { printf("search %d: index: %d\n", num, binary_search_rec(a, 0, 6, num)); } return 0; } ``` 代码解释 1. `binary_search_rec` 函数: - 基本情况: 如果 `left` 大于 `right`,说明目标值不在数组中,返回 `-1`。 - 计算中间索引: 使用 `left + (right - left) / 2` 来避免溢出。 - 比较中间值: - 如果 `a[mid]` 等于目标值,返回 `mid`。 - 如果 `a[mid]` 小于目标值,递归地在右半部分查找。 - 如果 `a[mid]` 大于目标值,递归地在左半部分查找。 2. `main` 函数: - 定义一个有序数组 `a`。 - 使用 `for` 循环遍历从 `0` 到 `7` 的数字,并调用 `binary_search_rec` 函数进行查找。 - 打印每个数字的查找结果。 运行结果 运行上述代码,输出将会是: ``` search 0: index: 0 search 1: index: 1 search 2: index: 2 search 3: index: 3 search 4: index: -1 search 5: index: 4 search 6: index: 5 search 7: index: 6 ``` 这表明程序正确地找到了数组中存在的元素,并且对于不存在的元素(如 `4`)返回了 `-1`。 ######[AI写代码神器 | 611点数解答 | 2024-10-17 10:26:07]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)376
- C 语言实现链表操作:创建、输出、删除及插入功能详解(字节豆包 | 534点数解答 | 2024-12-09 21:33:48)360
- C语言实现链表创建、输出、删除与插入操作的完整代码及注意要点(字节豆包 | 609点数解答 | 2024-12-18 12:18:21)377
- Python 实现:带边界处理与验证的任意基数数字转换递归程序(字节豆包 | 198点数解答 | 2024-11-21 14:20:25)451
- Python 递归函数实现:将数字转换为指定基数的输出(百度文心 | 499点数解答 | 2024-11-22 09:58:55)351
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)252
- C 语言实现:精准查找比特流中的同步码(字节豆包 | 336点数解答 | 2024-11-14 22:45:41)158
- 编程模拟:偶数张牌经 k 次洗牌后第 p 张牌编号求解(DeepSeek | 126点数解答 | 2026-01-05 12:15:30)41
- 螺旋矩阵:根据输入行列号精准求出对应位置数字的算法揭秘(DeepSeek | 740点数解答 | 2026-01-05 12:16:41)65
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)347
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)496
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)383