学习
错题
模考
我的
登录/注册/忘记密码
学习 / 函数 / 递归函数
递归函数
自己调用自己;必须有出口
1. 自己调用自己
函数体里再调用**自己**,叫递归。必须先写清**什么时候不再调用**(出口),再写「缩小一点的同一问题」。 ```c int fac(int n) { if (n <= 1) return 1; /* 出口:1! 和 0! 都当 1 */ return n * fac(n - 1); } ``` `fac(3)` 这样展开: - `fac(3)` → `3 * fac(2)` - `fac(2)` → `2 * fac(1)` - `fac(1)` → `1`(出口,不再调用) 再一层层乘回去:`2 * 1 = 2`,`3 * 2 = 6`。 递归不是新语法,就是普通函数调用,碰巧调用的是自己。每一次调用都有自己的一份 `n`。
2. 必须先写出口
没有出口,或出口永远走不到,会一层层套下去,程序停不下来(栈用尽)。 ```c int f(int n) { return n * f(n - 1); /* 错:没有 if,没有停 */ } ``` 写递归先问两句: 1. 最小的情况直接给出答案了吗?(出口) 2. 每次调用是否在**靠近**出口?(例如 `n-1`,而不是 `n+1`、原样 `n`) 能用循环写的,不必强行递归。专升本先会看:出口在哪、调用了几次、返回值怎么乘/加回去。
开始练习
动手写
返回函数
动手写
6 道编程 · 综合运用本阶段知识点
编程题把本阶段知识点串起来用。只看要点不做,认识停在纸面上。
查看本阶段全部编程题
递归求阶乘
未做
开始写
递归求斐波那契
未做
开始写
递归求连续和
未做
开始写
递归求最大公约数
未做
开始写
递归求整数幂
未做
开始写
递归求整数位数
未做
开始写
登录
注册
忘记密码
点击此处输入用户名
点击此处输入密码
登录
点击此处输入用户名
点击此处输入密码
点击此处输入邮箱
发送验证码
点击此处输入验证码
点击此处输入邮箱
发送验证码
点击此处输入验证码
点击此处输入新密码