深入解析格雷码生成算法:递归求解与代码实现
问题分析 格雷码的生成规则: - 1 位格雷码:`0, 1` - n 位格雷码 = `0` + (n-1 位格雷码顺序) 和 `1` + (n-1 位格雷码逆序) 关键点 对于 n 位格雷码,编号 k 的二进制串: - 若 k < 2^(n-1),则最高位为 0,剩余位是 (n-1) 位格雷码的第 k 个。 - 若 k ≥ 2^(n-1),则最高位为 1,剩余位是 (n-1) 位格雷码的第 (2^n - 1 - k) 个(逆序部分)。 递归求解 1. 若 n = 1,直接返回 `"0"`(k=0)或 `"1"`(k=1)。 2. 计算 mid = 2^(n-1)。 3. 若 k < mid,返回 `"0" + gray(n-1, k)`。 4. 否则,返回 `"1" + gray(n-1, mid*2 - 1 - k)`。 代码实现 ```cpp #include <iostream> #include <string> using namespace std; string gray(int n, long long k) { if (n == 1) { return (k == 0) ? "0" : "1"; } long long mid = 1LL << (n - 1); // 2^(n-1) if (k < mid) { return "0" + gray(n - 1, k); } else { return "1" + gray(n - 1, mid * 2 - 1 - k); } } int main() { int n; long long k; cin >> n >> k; cout << gray(n, k) << endl; return 0; } ``` ######[AI问答 | 443点数解答 | 2026-01-05 12:21:49]
- 代码填空挑战:完成正态分布、随机数生成及数据处理代码(阿里通义 | 506点数解答 | 2025-03-23 14:32:14)315
- 挑战!完成代码填空解锁数据处理奥秘(字节豆包 | 116点数解答 | 2025-03-26 22:22:15)334
- 挑战填空!完成这段 NumPy 代码实现数据生成与保存(DeepSeek | 178点数解答 | 2025-03-26 22:26:30)395
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)342
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)274
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)305
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- Python 实现:带边界处理与验证的任意基数数字转换递归程序(字节豆包 | 198点数解答 | 2024-11-21 14:20:25)432
- Python 递归函数实现:将数字转换为指定基数的输出(百度文心 | 499点数解答 | 2024-11-22 09:58:55)335
- 5条新春贺语,开启龙年吉祥团圆新篇章!(字节豆包 | 135点数解答 | 2025-01-15 14:43:34)313
- 编程模拟:偶数张牌经 k 次洗牌后第 p 张牌编号求解(DeepSeek | 126点数解答 | 2026-01-05 12:15:30)29
- 螺旋矩阵:根据输入行列号精准求出对应位置数字的算法揭秘(DeepSeek | 740点数解答 | 2026-01-05 12:16:41)50