c语言递推递归题目,C语言-递推递归.ppt
C语言-递推递归
第二讲 基础算法 目录 递推 递归 排序与检索 递推 指一个序列u1,u2,u3,…,un-1,un,后面的每一项都能按公式由前面的一项或连续的几项推算出来,或者前面的每一项都能按公式由后面的一项或连续的几项推算出来。前者叫“顺推”,后者叫“逆推”。 递推 有5人坐在一起,当问第5个人多少岁,他说比第4个人大2岁,问第4个人多少岁,他说比第3个人大2岁,依此下去,问第一个人多少岁,他说他10岁,最后求第5个人多少岁? 显然可以得到如下公式: 斐波那契级数-递推的经典问题 一对新生小兔,一个月后长成中兔,从第三个月开始长成大兔并每个月生一对小兔。按此规律,一年后共有多少对兔子。 Fibnacci 数列 例-巧妙推算走楼梯 楼梯有n级台阶,如果一步走1级或2级,试问:共有多少种不同的走法? 例-巧妙推算走楼梯 总结:递推求解的基本方法: 首先,确认:能否容易的得到简单情况的解? 骨牌铺放 伯努利装错信封问题 分析思路: 得到如下递推公式: 递归 递归 递归 递归 递归 Hanoi(汉诺塔)问题:三根柱子A、B、C,其中A柱上有64个大小不等的圆盘,并且大的在下,小的在上。要求把这64个圆盘从A柱移动到C柱上,每次只能移动一个圆盘,移动时可以借助B来进行,但在任何时候,任何柱上的圆盘都必须保持大盘在下,小盘在上。求移动的过程。 递归 (1)假如只有一个盘子的话,可以直接将盘子从A柱移动到C柱,即A?C。 递归 (2)假如有两个盘子,则: A?B A?C B?C 递归 (3)假如有三个盘子,则情况开始复杂,移动顺序为: A?C A?B C?B A?C B?A B?C A?C 递归 当有n个盘子需要移动时,通常的方法如下: (1)把A柱上n-1个盘子借助C柱移动到B柱上。只有这样,C柱才能为空,则A柱上的第n个盘子(最大的那个)才能直接移动到C柱上。 (2)将A柱上的剩下的第n个盘子移动到C柱上。这个盘子已最后到位,不需要再移动了。 (3)再将B柱上的n-1个盘子借助A柱移动到C柱。 递归 void hanoi(int n,char A,char B,char C) /*借助B,把n个盘子从A移动到C*/ { if(n==1) move(A,C); else {hanoi(n-1,A,C,B); /*借助C,把n-1个盘子从A移动到B*/ move(A,C); /*把第n个盘子从A移动到C*/ hanoi(n-1,B,A,C); /*借助A,再把n-1个盘子从B移动到C*/ } } 排序与检索 查找表:用于查找的数据集合,由同一类型数据元素构成. 排序与查找 顺序查找法 顺序查找法 折半查找法(二分查找) A在心里想一个不超过1000的正整数, 由B来猜,请问可以在多少次以内猜到该数? 折半查找法 折半查找法 折半查找法 折半查找法 插入排序 直接插入排序 初始序列:[51] 33 62 96 87 17 28 51 区别相同关键字,[]内为有序序列 i=2(33) [33 51] 62 96 87 17 28 51 i=3(62) [33 51 62] 96 87 17 28 51 i=4(96) [33 51 62 96] 87 17 28 51 i=5(87) [33 51 62 87 96] 17 28 51 i=6(17) [17 33 51 62 87 96] 28 51 i=7(28) [17 28 33 51 62 87 96] 51 i=8(51) [17 28 33 51 51 62 87 96] 直接插入排序 折半插入排序 交换类排序 交换类排序:通过交换逆序元素进行排序. ◆冒泡排序 ◆快速排序 冒泡排序 冒泡排序(Bubble Sort):从头扫描待排序记录序列,在扫描过程中顺次比较相邻两个元素的大小. 冒泡排序 冒泡排序 快速排序 划分问题:从待排序记录中选取一个记录K(第一个)作为分界点。将原始序列与之比较,小于的排到K前面,大于的排到K后面。(左边的任意元素都小于或等于右边元素) 递归求解:把左右两部分分别排序(用上述方法),直到所有子表的表长不超过1。 合并问题:不用合并,此时已经是完全有序了。 快速排序 8 3 6 5 14 12 30 快速排序 void QSsort(RecordType r[],int low,int high) { if(low
c语言递推递归题目,C语言-递推递归.ppt相关推荐
- c语言编程 遍历字符串,请教大家一个C语言面试的编程题目 C语言:循环执行让用户输入一串字符串,如123456789......
导航:网站首页 > 请教大家一个C语言面试的编程题目 C语言:循环执行让用户输入一串字符串,如123456789... 请教大家一个C语言面试的编程题目 C语言:循环执行让用户输入一串字符串,如 ...
- c语言程序设计顺序结构题目,C语言编程 顺序结构编程练习题目
C语言顺序结构编程练习题目 C语言编程 顺序结构题目 题目1计算摄氏温度 输入一个华氏温度,要求输出摄氏温度.公式为:C=5/9(F-32),输出要有文字说明,取2位小数. 式中:C表示摄氏温度,F表 ...
- c语言编程思想的题目,c语言方面毕业设计选题范文.docx
c语言方面毕业设计选题范文 c语言方面毕业设计选题 篇一:C语言课程设计选题 C语言课程设计 一.设计要求与设计报告 设计要求 1.任意选定以下一个题目,限3人选的题目可由1-3人完成(用*表示) 2 ...
- c语言 电报翻译的题目,C语言程序设计实训题目.doc
C语言程序设计实训题目.doc C语言程序课程设计题目题目1年历显示功能要求(1) 输入一个年份,输出是在屏幕上显示该年的日历.假定输入的年份在1940-2040年之间.(2) 输入年月,输出该月的日 ...
- c语言电报关系的题目,c语言所有题目以跟答案.doc
c语言所有题目以跟答案 判断题 关系运算符<=与==的优先级相同. N 2.7&3+12的值是15. N 3.在TurboC中,整型数据在内存中占2个字节. Y C语言本身不提供输入输出 ...
- C语言中简单的题目,C语言的一些简单题目,没有答案,哪位大神帮忙做一下!!!...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 20.下面正确的语句是 . c语句中对嵌套if语句的规定是:else总是与___配对. A) 缩进位置相同的if B) 其同一复合语句中,前面最近的且尚未 ...
- c语言复合赋值表达式题目,C语言中复合赋值运算,表达式等知识.doc
C语言中复合赋值运算,表达式等知识.doc 3.1复合赋值运算 算术运算符"+ - * / %"和赋值运算符"="结合起来,形成复合赋值运算符.如下所示:+= ...
- c语言判断非法字符题目,C语言考试题库之判断题-c语言考试判断题
<C语言考试题库之判断题-c语言考试判断题>由会员分享,可在线阅读,更多相关<C语言考试题库之判断题-c语言考试判断题(7页珍藏版)>请在人人文库网上搜索. 1.三.判断题(1 ...
- 面试加试c语言_经典面试题目C语言
题一,堆和栈的区别是? 题二,Volatile与Register的区别是? 题三,ARM里的大端格式和小端格式分别是什么意思? 题一答案: (1)存储内容不同 栈:在函数调用时,栈中存放的是函数中(最 ...
最新文章
- lua如何打印行号_Lua 字符串处理
- QT最方便的LOG库使用Easylogging++,只需要一个头文件
- checkbox控件的checked属性作用是_VB6基本控件的使用,制作一个数据输入窗口
- mysql在linux只有用空密码_在Linux服务器上配置phpMyAdmin--允许空密码
- 共享内存:mmap函数实现
- Angular v6 正式发布
- C++ STL string字符串替换 replace函数的使用
- 2012/10/31的工作总结——潘学
- opera Reservation More Fields(接送机)
- cmos和ttl_ttl和cmos的区别
- 商业逻辑12讲之领导力的逻辑
- Elasticsearch中object类型与nested类型之间的区别
- ftp服务器匿名用户文件夹,ftp服务器匿名用户文件夹
- keil如何添加STM32系列
- java spark k-means算法
- 硬件基础知识----(1)基本概念
- 牛客3007E-立方数-欧拉线性筛+素数分解+二分
- transparent(指定透明度)
- 矩阵的创建和计算方法
- 什么是__name__== “__main__“