如何用递归实现数字先降序截断再升序恢复的级联打印
递归实现级联打印的修改方案
核心原理是利用递归调用的回溯特性:你现有代码只利用了递归向下调用阶段的执行逻辑完成降序打印,只需要在递归调用语句的后方追加打印逻辑,就可以在递归逐层返回的回溯阶段自动完成升序补全打印,不需要额外维护长度追踪、状态标记这类冗余变量。
修改后完整代码
function cascade(number) { const strNum = number.toString(); // 向下递归阶段的降序打印 console.log(strNum); // 长度大于1时继续截断递归 if (strNum.length > 1) { const truncated = strNum.substring(0, strNum.length - 1); cascade(truncated); // 回溯阶段的升序打印 console.log(strNum); } } // 测试调用 cascade(12345);
执行逻辑说明
以调用cascade(123)为例,执行流程如下:
- 第一层(输入123):打印
123→ 截断为12进入下一层递归 - 第二层(输入12):打印
12→ 截断为1进入下一层递归 - 第三层(输入1):打印
1→ 长度为1不继续递归,返回上一层 - 回到第二层:执行递归后的打印语句,输出
12→ 返回上一层 - 回到第一层:执行递归后的打印语句,输出
123→ 执行结束
最终输出顺序为:123、12、1、12、123,完全符合需求。调用cascade(12345)就会输出你要求的完整序列。
内容的提问来源于stack exchange,提问作者DaShaman
相关产品推荐
相关产品推荐

