一:判断问题是否可以使用递归来解决
-
判断问题的规模可以递归地减小
例如:再求递归问题的时候。求5的递归:其实就是5 * 4的阶乘,求4的阶乘其实就是将 4 * 3的阶乘,…。我们不难发现问题是在递减的减小的。 -
找到当前规模下的操作(一般都是很简单的*)**
例如:还是以阶乘为例,当前的操作其实就是 将当前要求几的阶乘的数 乘以 下一个数的阶乘,假如现在求阶乘的方法为fn(int n) ,如果当前要求n的阶乘,那么当前需要操作的步骤是 n * fn(n-1). -
找到将问题规模减小一级的桥梁,也就是找到该层规模到下一层规模的问题的递归描述
例如:以阶乘为例,问题规模减小一级的桥梁其实就是 a(n-1),其中的 n-1 就是体现了规模的减小,他就是桥梁 -
考虑递归的终止条件(使用递归的必要条件*)**
例如:以阶乘为例,递归的终止条件其实就是 n 小于等于1的时候返回1,因为1的阶乘是1 而却 每一个数的递归的终点都是前面累计的乘数积 乘以 1
二:代码过程
-
递归的终止条件
if(n <=1 ) return 1; -
本层问题需要执行的操作
retrun n * fn(n - n); -
递归到下一层的描述
fn(n - n);
完整代码:
# include <stdio.h>
//递归函数fn(int)
int fn(int n) {
if(n <= 1) return 1;
return n * fn(n-1);
}
int main(void) {
//求5的阶乘
int res = fn(5);
printf("5的阶乘:%d",res);
return 0;
}