news 2026/7/5 9:14:44

【递归入门】---- 识别递归问题 + 三步写出正确代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【递归入门】---- 识别递归问题 + 三步写出正确代码

1. 题目描述:求“数根”问题

题目链接

给定正整数n nn(如 38),不断将其各位数字相加,直到结果为一位数。

38 → 3+8=11 → 1+1=2 → 输出 2

这道题可用循环轻松解决,但我们的目标是:用递归来写,并从中提炼通用方法


2. 什么样的问题适合用递归?

不是所有问题都值得用递归。真正适合递归的问题,通常具备以下三个特征

特征 1:自相似性(Self-similarity)

问题的结构在不同规模下“看起来一样”。

  • 数根:f(n) = f(各位和)→ 问题形式完全相同

  • 阶乘:n! = n × (n-1)!

一句话判断

如果你能用“……的……”来描述问题(如 n 的数根 =(n 的各位数字之和)的数根。),那它很可能适合递归。


特征 2:存在明确的最小情况(Base Case)

必须有无需递归就能直接回答的情形。

  • 数根:n < 10→ 直接返回n
  • 阶乘:0! = 1

没有基线条件 → 无限递归 → 栈溢出!


特征 3:每次递归让问题变小并趋近基线

参数必须朝着终止条件收敛。

  • n → sum_of_digits(n)(38 → 11 → 2)
  • n → n-1(阶乘)

❌ 如果递归后问题没变小(如f(n) = f(n)),就会死循环。


3. 如何写出正确的递归程序?——三步心法

掌握了“识别”,接下来是“构造”。我们用递归三步心法来写“数根”:


第一步:写出基线条件(Base Case)

:什么情况下,我不需要再递归?

对数根:
→ 如果n < 10,它本身就是答案!

if(n<10){returnn;// 出口!}

技巧:先写这一行,避免忘记出口。


第二步:定义递归关系(Recursive Step)

:当前问题能否转化为一个“更小”的同类问题?

对数根:
→ 先算各位和x,然后求x的数根!

returncalc(x);// 问题规模缩小

关键心态

不要试图脑内展开所有调用!
只需相信:calc(x)能正确返回x的数根。你只负责当前层。


第三步:实现“缩小问题”的工具

有时需要一小段逻辑生成子问题输入。

对数根:计算各位和:

intx=0;while(n){x+=n%10;n/=10;}

这段代码不属于递归思想本身,只是辅助。可内联,也可拆成独立函数。


完整代码:三步合一

#include<bits/stdc++.h>usingnamespacestd;intcalc(intn){// 第一步:基线条件if(n<10)returnn;// 第三步:工具——计算各位和intx=0;while(n){x+=n%10;n/=10;}// 第二步:递归调用(问题变小)returncalc(x);}intmain(){intn;cin>>n;cout<<calc(n)<<endl;return0;}

安全(递归深度 ≤ 3)
正确(符合数学定义)
清晰(三步结构分明)


4. 避坑指南

错误表现解决方案
忘记基线条件栈溢出先写if (base) return ...
问题没变小无限递归检查参数是否真的缩小(如n → x < n
过度复杂化逻辑混乱只专注当前层:判断 → 缩小 → 调用

口诀
“先写出口,再缩问题,相信子问题能搞定。”


5. 总结

  • 适合递归的问题 = 自相似 + 有出口 + 能缩小
  • 写递归的三步心法
    1️⃣ 写基线条件(先保命)
    2️⃣ 定义递归关系(信子问题)
    3️⃣ 实现缩小工具(辅助逻辑)
  • 不要怕递归——它只是“让问题自己解决自己”的思维方式。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 14:09:23

多路径流程设计难题,Dify工作流跳转配置一招搞定

第一章&#xff1a;多路径流程设计的挑战与Dify破局之道在现代应用开发中&#xff0c;多路径流程设计成为复杂业务逻辑实现的核心模式。面对分支众多、状态分散、维护成本高的问题&#xff0c;传统开发方式往往难以兼顾灵活性与可维护性。Dify 作为新一代低代码 AI 应用开发平台…

作者头像 李华
网站建设 2026/7/5 5:46:09

【Dify工作流依赖检查全攻略】:掌握高效排查技巧,避免上线事故

第一章&#xff1a;Dify工作流依赖检查概述在构建基于 Dify 的自动化工作流时&#xff0c;确保各节点之间的依赖关系正确无误是保障流程稳定运行的关键环节。依赖检查机制能够识别节点间的输入输出匹配性、资源可用性以及执行顺序的合理性&#xff0c;从而避免因配置错误导致的…

作者头像 李华
网站建设 2026/6/25 19:03:19

思科网络发现协议CDP基础

学习目标: CDP:cisco discover protocol 思科网络发现协议(为了发现邻居) Q:发现邻居的前提条件是什么? A:要先建立邻居,然后再关联,最后查看邻居的状况 LLDP(链路状态的协议) NTP IOS系统的镜像(网络设备的操作系统)NOS(网络服务器操作系统)OS(一般指代的是客…

作者头像 李华
网站建设 2026/7/2 23:26:47

思科网络设备密码配置技术基础1

温故知新:上午我们讲了IP地址的相关内容,下午主要给思科的网络设备配置密码。 密码分为(四种)两类:明文密码-----加密密码 (console 控制台密码;vtp虚拟终端的密码) 一,给设备配置密码并验证 1.配置明文密码 问号?代表了寻找帮助;(在当前模式下寻找帮助信息) 上…

作者头像 李华
网站建设 2026/7/5 4:12:43

部署Qwen3-VL-30B:多模态大模型实战指南

部署Qwen3-VL-30B&#xff1a;多模态大模型实战指南 在智能文档分析、医学影像解读和自动驾驶语义理解等前沿场景中&#xff0c;AI 正面临一个关键瓶颈&#xff1a;“看得见”不等于“读得懂”。传统视觉语言模型&#xff08;VLM&#xff09;往往只能做图文标签匹配&#xff0c…

作者头像 李华
网站建设 2026/7/5 6:06:20

Wan2.2-T2V-A14B部署指南:快速构建高保真视频生成能力

Wan2.2-T2V-A14B部署指南&#xff1a;快速构建高保真视频生成能力 在影视制作周期动辄数月、广告创意反复打磨的今天&#xff0c;有没有可能让一段“脑海中的画面”瞬间变成可播放的高清视频&#xff1f;不是草图&#xff0c;不是分镜&#xff0c;而是真正动作连贯、光影自然、…

作者头像 李华