使用递归解决问题的思路

一:判断问题是否可以使用递归来解决

  1. 判断问题的规模可以递归地减小
    例如:再求递归问题的时候。求5的递归:其实就是5 * 4的阶乘,求4的阶乘其实就是将 4 * 3的阶乘,…。我们不难发现问题是在递减的减小的。

  2. 找到当前规模下的操作(一般都是很简单的*)**
    例如:还是以阶乘为例,当前的操作其实就是 将当前要求几的阶乘的数 乘以 下一个数的阶乘,假如现在求阶乘的方法为fn(int n) ,如果当前要求n的阶乘,那么当前需要操作的步骤是 n * fn(n-1).

  3. 找到将问题规模减小一级的桥梁,也就是找到该层规模到下一层规模的问题的递归描述
    例如:以阶乘为例,问题规模减小一级的桥梁其实就是 a(n-1),其中的 n-1 就是体现了规模的减小,他就是桥梁

  4. 考虑递归的终止条件(使用递归的必要条件*)**
    例如:以阶乘为例,递归的终止条件其实就是 n 小于等于1的时候返回1,因为1的阶乘是1 而却 每一个数的递归的终点都是前面累计的乘数积 乘以 1

二:代码过程

  1. 递归的终止条件
    if(n <=1 ) return 1;

  2. 本层问题需要执行的操作
    retrun n * fn(n - n);

  3. 递归到下一层的描述
    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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值