递归问题集合

算法递归——集合的全排列问题 集合全排列问题 设集合 R={ r1,r2,r3 … r n},显然全排列的数目为 n!。 那么如何显示集合的所有全排列呢? 可以用递归的方式实现。 解题思路 如果集合有n个元素,那么就可以看作 n-1个元素全排列之后再加上 剩下的那个元素,因为是全排列,所以每一个元素都会剩下一次。(例如: R={1,2,3}的全排列。 若 1 剩下,则 {2,3} 先进行排列,再与1结合,结果是 1 23,1 ... 阅读详情

今天分享几个递归的小程序
1.递归输出斐波那契数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int fun(int n)
{
	int result=0;
	if (n == 1 || n == 2){
		result = 1;
	}
	else{
		result = fun(n - 1) + fun(n - 2);
	}
	return result;
}
int main()
{
	int n;
	printf("please input the n;\n");
	scanf("%d",&n);
	printf("the result is:%d\n",fun(n));
	system("pause");
	return 0;
}

斐波那契数除前两个数外后面的数都是前面两个数之和,所以递归实现时,前两个数直接是1,后面的数都等于前两个数之和,目标数往前递归,直到条件不符,执行到开始两个数时,再一级一级的往回返。

2.递归实现n的k次方

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int n, k;
int mul(int n,int k) 
{
	int ret = 0;
	if (k == 0){
		ret = 1;
	}
	else{
		ret = n*mul(n, k - 1);
	}
	return ret;
}
int main()
{
	printf("请输入你想算的底数和阶数:\n");
	scanf("%d %d",&n,&k);
	printf("the result is:%d\n",mul(n, k));
	system("pause");
	return 0;
}

这道题和前面的斐波那契数大同小异都是差不多的。

3.递归返回一个一个数字各个位数之和

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int DigitSum(int n)
{
	int m = 0;
	int ret = 0;
	if (n < 10){
		ret = n;
	}
	else{
		m = n % 10;
		n = n / 10;
		ret = m + DigitSum(n);
	}
	return ret;
}
int main()
{
	int n;
	printf("请输入你想组合的数字:\n");
	scanf("%d",&n);
	printf("the result is:%d\n",DigitSum(n));
	return 0;
}

这道题就是每次就是让该数字/10是逐渐变小,n%10是取每一位,比如123/10是12再/10是1然后就会判断不符合则会返回1,然后则会一级一级往回返,则会进行12%10就会取到2,在返就是123%10就会取到3,这样每一位就都取到了。

4.递归实现字符串逆序(不能使用C函数库里的字符串操作函数!)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void reverse_string(char *s)
{
	char tmp = *s;            //用temp变量存字符串的第一个元素
	int len = strlen(s);      //求字符串长度
	*s = *(s + len - 1);      //把字符串‘\0’前的那个元素赋给第一个元素
	*(s + len - 1) = '\0';    //把‘\0’前的那个字符赋值为‘\0’
	if (strlen(s) > 1){       //如果字符串的长度>1则执行if里面的语句
		reverse_string(s+1);  //每次首指针向后移一位再递归该函数
	}
	*(s + len - 1) = tmp;     //当条件不符时则会执行该行程序,把每次tmp存的首元素都逐个还原在中间元素的后面
}
int main()
{
	char s[1024] = { 0 };
	printf("请输入要逆序的字符串:\n");
	gets(s);
	reverse_string(s);
	printf("逆序结果为:%s\n",s);
	system("pause");
	return 0;
}

5.递归实现strlen()字符串操作函数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int string_strlen1(char* s)
{
	if (*s == '\0'){
		return 0;
	}
	else{
		return string_strlen1(++s) + 1;
	}
}
int main()
{
	char  s[1024];
	printf("请输入字符串:\n");
	gets(s);
	printf("字符串长度为:%d", string_strlen1(s));
	system("pause");
	return 0;
}

每次首指针++向后移动判断该元素是不是’\0’,不是的话则继续递归调用该函数,并且长度++,是的话则返回0,并一级一级的返回。

     这几个问题都是递归思想里比较典型的基础问题,所以理解了这几个问题对于后面比较麻烦的递归问题就有一定的帮助。
集合划分问题(递归) 问题描述n个元素的集合{1, 2, …, n}可以划分为若干个非空子集。例如,当n=4 时,集合{1,2,3,4}可以划分为15 个不同的非空子集如下:{{1},{2},{3},{4}},{{1,2},{3},{4}},{{1,3},{2},{4}},{{1,4},{2},{3}},{{2,3},{1},{4}},{{2,4},{1},{3}},{{3,4},{1},{2}},{{1,2},{3,... 阅读详情

相关推荐

递归与分治算法求集合划分问题

1.掌握分治算法的基本思想(分-治-合)、技巧和效率分析方法; 2.分析并掌握“二分搜索问题”的递归与分治算法; 3.使用递归与分治算法求解集合划分问题; 4.学会利用分治算法解决实际问题。

m0_73618137的博客 530

递归遍历示例

递归遍历树 getTreeList (list) { const vm = this for (let item of list) { item.label = item.menucname item.id = item.taskcode if(vm.flag === '0'){ //查看过来树禁用 item.disabled = true } vm.expandList.push(item.taskcode) // 树默认展开一级菜单的集合 item.ch

weixin_43203982的博客 201

算法分析递归之集合的全排列问题

基于算法分析与设计——以大学生程序设计竞赛为例这本书中的第三章3.1.2集合的全排列问题 本题提出的问题是要解决n个元素的n!中排列方式,设R={r1,r2,···rn},令Ri=R-{ri}。集合的全排列记为perm(X), 则(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳定义如下: 当n=1时,perm(R)=(r),其中r是集合R...

weixin_40591181的博客 1470

Python输出集合中的所有子集

本文从四个方面详细介绍了如何使用Python代码生成一个集合的所有子集,包括使用itertools模块、二进制表示方法、递归方法等。在实际应用中,根据需要选择合适的方法即可。

An4480的博客 1561

DeepSeek研发的精算大模型「精卫」已实现98%精算任务覆盖,中国人寿采用后年节约3.2亿元技术采购成本,形成关键技术替代效应

根据现有资料,精算领域关键技术替代效应的行业标准定义尚未明确具体提及。然而,可以从相关文献中提取一些关键概念和方法来推导出可能的定义。​替代效应的基本定义​:替代效应是指一种商品价格变动引起另一种商品的相对价格变动,从而导致消费者在维持原有效用水平不变的条件下对商品需求量做出的调整。​技术替代效应​:在精算领域,技术替代效应可以理解为新技术或新方法对现有技术或方法的替代,从而影响精算模型、数据处理和决策过程。例如,机器学习在精算中的应用日益增长,改变了精算师的工作方式和模型构建方法。​。

百态·数智思维 | 聚焦大数据、量化与未来AI 1712

RK3588 InsightFace人脸识别移植及精度测试全解析

本文详细介绍了如何在RK3588平台上移植InsightFace人脸识别模型并进行精度验证。通过PyTorch转ONNX、ONNX转RKNN量化模型的关键步骤,实现了INT8量化模型的部署。测试数据显示,该模型在LFW数据集上达到99.43%的准确率(接近官方99.52%),推理时间仅14.23ms。ROC曲线和相似度分布图表明模型区分能力优秀,AUC超过0.99,满足实际应用需求。文中还详解了量化原理、环境搭建和测试方法,为边缘设备部署人脸识别提供了完整解决方案。

Hi20240217的博客 3672

「递归算法」:子集(两种解法)

给你一个整数数组nums,数组中的元素。返回该数组所有可能的子集(幂集)。解集包含重复的子集。你可以按返回解集。

C_Small_Cai的博客 956

手把手教你用Isograph Reliability Workbench 14.0绘制可靠性方框图(RBD)

本文详细介绍了如何使用Isograph Reliability Workbench 14.0绘制可靠性方框图(RBD),从软件安装、界面设置到基础项目创建和高级功能应用,手把手指导工程师完成系统可靠性分析。通过实际案例演示,帮助用户掌握RBD建模技巧,提升系统可靠性评估效率。

weixin_26765287的博客 623

通过递归遍历出集合中的所有元素

'''通过递归遍历出集合中的所有元素 Created on 2013-9-29 @author: L.Eric ''' def print_List(list_nums): for each_item in list_nums : if isinstance(each_item,list): print_List(each_item)

erix1991的专栏 1158

C语言—for循环打印矩形,正三角形,倒三角形,九九乘法,等腰三角形,倒着的等腰三角形(简易版代码)(重点考察for循环嵌套)

本章节教大家如何利用for循环打印正三角形,倒三角形,九九乘法表及等腰三角形(简易版代码)说明:1、循环语句的循环体内又包含另一个完整的循环结构,称为循环结构的嵌套。内嵌的循环语句中还可以再嵌套循环结构,这样就形成多重循环结构的嵌套。2、for 语句、while 语句和 do-while 语句都允许嵌套。三种循环语句可以相互嵌套。3、内层的循环语句必须完全被包含在外层的循环体中,不能发生交叉。

m0_63501145的博客 1695

不用变压器也能联网?手把手教你PHY芯片直连的3种实用方案

本文详细介绍了PHY芯片直连的3种实用方案,帮助开发者在物联网设备中实现更经济、更精简的网络连接设计。通过分析电压驱动型和电流驱动型PHY的核心原理,提供具体的电路配置和优化建议,确保信号质量的同时节省成本和空间。

smartcontract5的博客 333

Python基础——递归及其经典例题(阶乘、斐波那契数列、汉诺塔)

Python中的递归问题,包括阶乘、斐波那契数列和汉诺塔问题

薛定谔的猫的博客 9953

【LAMMPS学习】四、运行 LAMMPS(2)命令行选项

本部分解释了在安装可执行文件或下载源代码并构建可执行文件后如何运行 LAMMPS。命令文档页面描述了输入脚本的结构以及它们可以包含的命令。

荷塘阅色 5242

关于集合幂集问题的递归算法

在许多地方都见到了关于集合幂集问题的研究,虽然知道怎么去求,但是关于用程序去输出这个结果还是一直没解决过。在算法课堂上见到了这个题目就索性把它给做了出来,而且要求用递归算法。我也想了许多的方法,有些可行,有些虽然有思路但是不知道该怎么用程序去实现它,所以在这里我提供一种解决问题的方法。 我是用二进制方法来解决这个问题:比如在这有一个集合s={a , b , c},,显然它的幂集为{() , (a

ProgramChangesWorld的专栏 5298

2011-2024年间各省数字普惠金融指数数据(覆盖广度、使用深度和数字化程度)

2、指标:数字金融普惠指数、数字金融覆盖广度指数、数字金融使用深度指数、普惠金融数字化程度指数、数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。中国各省的数字普惠金融指数数据,从数字金融覆盖广度、数字金融使用深度和普惠金融数字化程度3个维度来构建数字普惠金融指标体系。数字普惠金融指数一共3个维度、33项具体指标。全套指数包含数字金融覆盖广度指数、数字金融使用深度指数和普惠金融数字化程度指数,以及数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。

【优快云】 1万+

串行RapidIO(Serial RapidIO,SRIO):协议介绍

目录一、RapidIO背景介绍二、RapidIO协议概述2.1 包与控制符号2.2 包格式2.4 消息传递2.5 全局共享存储器2.6 流量控制2.7 串行物理层三、I/O逻辑操作与包格式四、维护操作与包格式五、消息操作与包格式六、总结 本文是基于Xilinx平台SRIO介绍(一)RapidIO协议介绍的内容作读书笔记。 一、RapidIO背景介绍 RapidIO采用三层分级体系结构,包括逻辑层、传输层和物理层该分级结的如下图所示: ● 逻辑层:位于最高层,定义全部协议和包的格式,它们为端点器件发起和完

Starry__的博客 1万+

递归与分治策略——集合划分问题,众数问题

集合划分问题n个元素的集合{1,2,.,n }可以划分为若干个非空子集。例如,当n=4 时,集合{1,2,3,4}可以划分为15个不同的非空子集如下:{1},{2},{3},{4}}, {{1,2},{3},{4}},{{1,3},{2},{4}}, {{1,4},{2},{3}},{{2,3},{1},{4}}, {{2,4},{1},{3}},{{3,4},{1},{2}}, {{1,2},{3,4}},{{1,3},{2,4}}, {{1,4},{2,3}},{{1,2,3},{4}}, {{1,2,

Christophe2008的专栏 8772

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[递归分治]集合划分问题java

集合划分问题 问题描述: n个元素的集合{1,2,.,n }可以划分为若干个非空子集。例如,当n=4 时,集合{1,2,3,4}可以划分为15个不同的非空子集如下: {1},{2},{3},{4}}, {{1,2},{3},{4}}, {{1,3},{2},{4}}, {{1,4},{2},{3}}, {{2,3},{1},{4}}, {{2,4},{1},{3}}, {{3,4},{1},{2}}, {{1,2},{3,4}}, {{1,3},{2,4}}, {{1,4},{2,3}}, {{1,2,3}

m0_52106292的博客 675

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

算法设计-C集合划分问题(递归)

C算法 集合划分问题 1 问题描述: 2 数学建模: 2.1思路分析 2.2 数学公式 3 算法实现 #include <stdio.h> #include <stdlib.h> int gatherRecursion(int n, int m) { if (m==1||m == n) { return 1; }else { return m * gatherRecursion(n - 1, m) + gatherRecursion(n - 1, m -

qq_33562636的博客 880

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

递归求解放置背包问题 问题1:分苹果 问题2:集合划分子集(递归划分问题)

问题 D: 放苹果 时间限制: 1 Sec 内存限制: 128 MB 提交: 522 解决: 321 [提交][状态][讨论版][命题人:quanxing] 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 输入 第一行是测试数据的数目t(0≤t≤20)。以下每行均包含二个整数M和N,以空格分开。1...

weixin_45803988的博客 463

汉诺塔问题, 用递归方法求集合中的中位数

打印解决汉诺塔问题的所有步骤 1 void Move(int n, int start, int goal, int temp) 2 { 3 if (n >= 1) 4 { 5 Move(n - 1, start, temp, goal); //将最上面的n-1个盘子移到temp柱子上 6 printf("...

Lucky小黄人的博客 283

集合容斥双递归,超简洁解排考问题

集合容斥双递归,超简洁解排考问题—— 个人原创,解法如图: —— Maple-轩

qq_39064548的博客 244

集合划分问题(递归分治)

集合划分问题(递归分治)

蔡林浩的博客 745
上一篇: for循环趣味题
下一篇: C语言操作符涉及的二进制序列问题
Python_programer
博客等级 码龄9年 25粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值