perm函数c语言_C语言之递归排序算法
一、什么是递归算法?
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).
二、递归算法原理、特点、要求及实现
原理
递归过程一般通过函数或子过程来实现。递归方法:在函数或子过程的内部,直接或者间接地调用自己的算法。
特点
递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
要求
递归算法所体现的“重复”一般有三个要求:
1)是每次调用在规模上都有所缩小(通常是减半);
2)是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
3)是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。
三、C语言程序代码
#include
#define swap(x,y,t)((t)=(x),(x)=(y),(y)=(t))
void perm(char *list,int q,int p);
int count;
int main(void)
{
char list[]="abcd";
perm(list,0,3);//0是第一个元素的下标,2是最后一个元素的下标
printf("总共有%d中排列",count);
return 0;
}
void perm(char *list,int q,int p)//排序函数
{
char tmp;
int i;
if(q==p)
{
printf("%s\n",list);
count++;
}
else
{
for(i=q;i<=p;i++) //第一次q=0,p=2,第二次q=1,第三次q=2
{
swap(list[i],list[q],tmp);
perm(list,q+1,p);
swap(list[i],list[q],tmp);
}
}
//a开头的,后面是bc的所有排列
//swap(list[0],list[0],tmp);
//perm(list,1,2);
//swap(list[0],list[0],tmp);
//b开头的,后面是ac的所有排列
//swap(list[0],list[1],tmp);//a和b交换
//perm(list,1,2);
//swap(list[0],list[1],tmp);
//c开头的,后面是ab的所有排列
//swap(list[0],list[2],tmp);//a和c交换
//perm(list,1,2);
//swap(list[0],list[2],tmp);
}
perm函数c语言_C语言之递归排序算法相关推荐
- 电子英汉词典c语言程序设计报告,英汉电子词典设计报告_设计_C语言_C语言程序设计.doc...
英汉电子词典设计报告_设计_C语言_C语言程序设计 课程设计 课程名称 :C语言程序课程设计 题目名称 :电子英汉词典 学生学院 :电气信息学院 专业班级 :自动化1101 学 号 :20110102 ...
- C语言中的几种排序算法
C语言中的几种排序算法 在编程练习时,我们经常会遇到一些将一串乱序的数字排列成有序的数列(递增,递减)的问题,以此起到解决问题的效果.目前我使用的比较熟练的有三种排序算法,冒泡排序法,快速排序法,另外 ...
- 我们一起来排序——使用Java语言优雅地实现常用排序算法
破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...
- c语言prime函数怎么用_C语言教程_v20201106
编程基础 1.1 通俗地理解什么是编程语言 1.2 C语言究竟是一门怎样的语言? 1.6 初中毕业能学会编程吗? 1.7 C和C++到底有什么关系? 1.8 学了 C 语 ...
- c语言程序 中断函数示例,单片机_C语言函数_中断函数(中断服务程序)
c语言中的中断函数注意事项 单片机_C语言函数_中断函数(中断服务程序) 在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统. 中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该 ...
- C进阶_C语言_函数与指针_C语言指针进阶
上一篇博客http://t.csdn.cn/GYCiM 我们了解了指针相关知识,今天来了解函数和指针的关系. 目录 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 qsort 冒泡排序模拟实 ...
- char类型怎么输入 c语言_C语言零基础入门到精通视频课程(精品)
C语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...
- cshop是什么开发语言_C语言是用什么语言编写出来的?
谢邀 参考 Dennis M. Ritchie 写的 The Development of the C Language:Chistory,C 语言诞生的基本过程就是 Ken Thomson 不满意 ...
- 职高计算机专业c语言_C语言在中职计算机专业课程中的重要作用探究
摘 要:在中职计算机教学中,C语言是计算机专业学生必备的基本技能之一,同时也是一门基础课程.C语言具有强大的功能和广泛的应用,在相关的科技领域中,已经日趋完善和发展.结合C语言的特点,进一步指出了C语 ...
- 会员计费系统c语言_c语言课程设计报告会员卡计费系统源代码
#include <> .\n"); goto a; ...
最新文章
- PHP常用正则表达式汇总 [复制链接]
- golang go-restful RESTful框架 简介
- 南宁网络推广浅谈能使文章快速收录的技巧有哪些?
- 网站用域名能访问,用域名IP不能访问的原因分析
- C++ Primer 5th笔记(chap 16 模板和泛型编程)重载与模板
- reactjs使用eject暴露webpack核心配置
- .netcore 整合 log4net
- 演讲实录:MySQL 8.0 中的复制技术
- 24.redis持久化之AOF
- ajax escape用法,ie11下ajax用escape发送中文参数失败
- Exch:POP3 和 IMAP4 操作指南
- 《Gartner2016年度新兴技术成熟度曲线》全解读
- windows下sqlmap清除缓存记录
- jquery 处理页面的事件详解
- Excel填充空白的单元格
- 企业发放的奖金根据利润提成。
- 数据结构课程主页-2016级
- manjaro-i3wm 新装系统没有声音问题解决
- 学习bash第二版-前言
- 介绍 Q_DECLARE_PRIVATE与Q_DECLARE_PUBLIC