一.递归的概念
简单说程序调用自身的编程技巧叫递归。递归算法的实质将原来的问题转化为更小的同一问题,然后递归调用方法来表示问题的解。
二.递归的思想
递归的思想是把一个大型复杂问题层层转化为一个与原问题规模更小的问题,问题被拆解成子问题后,递归调用继续进行,直到子问题无需进一步递归就可以解决的地步为止。
递归,即分为两个阶段。递与归:
- 递:将递归问题分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思想来解决。
- 归:当你将问题不断缩小规模递去的时候,必须有一个明确的结束递去的临界点(递归出口),一旦 达到这个临界点即就从该点原路返回到原点,最终问题得到解决。
为确保递归的正常进行,需注意:
1.递推关系,可将所有其他情况拆分到基本案例。
2.递归终止的条件。
三.什么时候使用递归
- 当问题和子问题具有递推关系,比如杨辉三角、计算阶乘、斐波那契数列。
- 具有递归性质的数据结构,比如链表、树、图。
递归基本模型:
//递归函数
//递归终止条件
//递归操作
举个比方:(猴子偷桃问题)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//递归函数
int eatPeach(int day) {
//递归终止条件(if语句)
if (day == 1) {
return 1;
}
//递归操作(返回值)
return 2 * (eatPeach(day - 1) + 1);
}
int main() {
int result = eatPeach(5);
printf("桃子的总数量为%d", result);
return 0;
}