You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归函数reverseDisplay1与reverseDisplay2实现:定义B含义解析

嘿,我来帮你把定义B的递归逻辑彻底搞清楚!你已经明白定义A是“先打最后一位,再递归处理前面的数”,那定义B刚好是另一种递归顺序——咱们用例子加代码一步步拆解:

首先,先把定义B再直白翻译一遍:

要显示一个数字的逆序,先逆序显示从左数第二位开始到末尾的所有数字,再显示原数字的左数第一位(最高位)

举个具体的例子,比如数字1234,按照定义B的步骤走:

  1. 先逆序显示“第二位及之后”的数字:也就是234的逆序
  2. 等234的逆序显示完,再显示原数字的第一位1

那234的逆序又会重复这个规则:

  1. 先逆序显示34的逆序
  2. 再显示2

34的逆序规则:

  1. 先逆序显示4的逆序(就是4本身)
  2. 再显示3

把这些步骤串起来,最终输出就是4 → 3 → 2 → 1,和定义A的结果一样,但递归的执行顺序完全不同:A是先输出最后一位,再递归前面;B是先递归处理去掉最高位后的部分,最后才输出当前的最高位。

接下来看代码实现,我们需要先能获取“去掉最高位后的数字”,所以可以写个辅助函数计算数字的位数,然后用除法和取余来拆分最高位和剩余部分:

#include <stdio.h>
#include <math.h>

// 辅助函数:计算数字的位数
int countDigits(int value) {
    if (value == 0) return 1; // 处理0的特殊情况
    int count = 0;
    while (value > 0) {
        count++;
        value /= 10;
    }
    return count;
}

// 定义B对应的递归函数
void reverseDisplay2(int value) {
    // 基准情况:如果是个位数,直接输出
    if (value < 10) {
        printf("%d", value);
        return;
    }

    int digitCount = countDigits(value);
    int divisor = pow(10, digitCount - 1); // 用于拆分最高位的除数,比如1234的除数是1000
    int firstDigit = value / divisor;      // 取出最高位数字
    int restOfDigits = value % divisor;    // 取出第二位及之后的所有数字

    // 第一步:先逆序显示剩余部分
    reverseDisplay2(restOfDigits);
    // 第二步:再显示当前的最高位
    printf("%d", firstDigit);
}

// 测试函数
int main() {
    printf("逆序显示1234:");
    reverseDisplay2(1234); // 输出4321
    printf("\n逆序显示5:");
    reverseDisplay2(5);    // 输出5
    printf("\n逆序显示0:");
    reverseDisplay2(0);    // 输出0
    return 0;
}

我们再用1234走一遍递归调用栈的执行流程,更直观:

  • 调用reverseDisplay2(1234) → 先调用reverseDisplay2(234),暂不输出1
    • 调用reverseDisplay2(234) → 先调用reverseDisplay2(34),暂不输出2
      • 调用reverseDisplay2(34) → 先调用reverseDisplay2(4),暂不输出3
        • 调用reverseDisplay2(4) → 基准情况,直接输出4
      • 回到reverseDisplay2(34),输出3 → 当前输出:43
    • 回到reverseDisplay2(234),输出2 → 当前输出:432
  • 回到reverseDisplay2(1234),输出1 → 最终输出:4321

这样是不是就完全理解定义B的逻辑了?核心就是先递归处理去掉最高位后的子问题,再输出当前的最高位,和定义A的“先输出最低位,再递归处理前面的子问题”形成互补,虽然最终结果相同,但递归的执行顺序和输出时机完全不同。

内容的提问来源于stack exchange,提问作者Red

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:05:52