递归运算-1

本文深入探讨了递归运算的概念,包括直接和间接递归调用。文章介绍了递归运算的关键步骤,如找到终止条件并缩小问题规模。以阶乘为例详细解释了递归的实现过程,并进一步讨论了全排列问题,阐述了如何通过递归解决字符串的全排列。此外,还提及了半数集问题以及递归运算的记忆式搜索优化。最后,对递归进行了总结,强调了它在分解复杂问题中的作用。
摘要由CSDN通过智能技术生成

递归运算

递归运算是运用有限的语句描述一个无穷的集合,并且递归的调用可以自身直接调用(直接递归调用),也可以其他函数进行调用(间接递归调用)

递归的运算的要领:

1. 找到终止条件!!!!(通常应该是第一个或者前几个做为)
2. 然后就根据题目缩小规模进行运算!!!

  • 最简单例子—阶乘
    n!=1 * 2 * 3…*n

  • 找到终止条件,当0!时等于1是最特别的,所以当n==1时为终止条件

  • 然后注意观察此方程,是由每n和n-1项的乘机构成,所以其条件应该就是
    n *face(n-1)
    由图片可以明确的看出其调用方法以及返回。
    在这里插入图片描述

所以我们就可以写出代码,这是一个简单的递归调用。

#include <iostream>
using namespace std;
long fact(int n)
{
   if(n==0) return 1;
else return n * fact(n-1)
}
int main()
{
    
	int n;
	cin>>n;
	cout<<fact(n)<<endl;
}

***全排列

在这里插入图片描述
在这里插入图片描述如何将1234全排列呢?
也就是1可以在前面,然后234在后面进行排列。然后依次是2,3,4在第一位时后位进行排列的方法。
与之前一样,首先我们要找到终止条件

//产生从元素k-m的全排列,作为前k-1个元素的后缀
void perm(char list[],int k,int m)
{
   //构成一次全排列
    if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值