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相关推荐

  1. c语言编程 遍历字符串,请教大家一个C语言面试的编程题目 C语言:循环执行让用户输入一串字符串,如123456789......

    导航:网站首页 > 请教大家一个C语言面试的编程题目 C语言:循环执行让用户输入一串字符串,如123456789... 请教大家一个C语言面试的编程题目 C语言:循环执行让用户输入一串字符串,如 ...

  2. c语言程序设计顺序结构题目,C语言编程 顺序结构编程练习题目

    C语言顺序结构编程练习题目 C语言编程 顺序结构题目 题目1计算摄氏温度 输入一个华氏温度,要求输出摄氏温度.公式为:C=5/9(F-32),输出要有文字说明,取2位小数. 式中:C表示摄氏温度,F表 ...

  3. c语言编程思想的题目,c语言方面毕业设计选题范文.docx

    c语言方面毕业设计选题范文 c语言方面毕业设计选题 篇一:C语言课程设计选题 C语言课程设计 一.设计要求与设计报告 设计要求 1.任意选定以下一个题目,限3人选的题目可由1-3人完成(用*表示) 2 ...

  4. c语言 电报翻译的题目,C语言程序设计实训题目.doc

    C语言程序设计实训题目.doc C语言程序课程设计题目题目1年历显示功能要求(1) 输入一个年份,输出是在屏幕上显示该年的日历.假定输入的年份在1940-2040年之间.(2) 输入年月,输出该月的日 ...

  5. c语言电报关系的题目,c语言所有题目以跟答案.doc

    c语言所有题目以跟答案 判断题 关系运算符<=与==的优先级相同. N 2.7&3+12的值是15. N 3.在TurboC中,整型数据在内存中占2个字节. Y C语言本身不提供输入输出 ...

  6. C语言中简单的题目,C语言的一些简单题目,没有答案,哪位大神帮忙做一下!!!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 20.下面正确的语句是 . c语句中对嵌套if语句的规定是:else总是与___配对. A) 缩进位置相同的if B) 其同一复合语句中,前面最近的且尚未 ...

  7. c语言复合赋值表达式题目,C语言中复合赋值运算,表达式等知识.doc

    C语言中复合赋值运算,表达式等知识.doc 3.1复合赋值运算 算术运算符"+ - * / %"和赋值运算符"="结合起来,形成复合赋值运算符.如下所示:+= ...

  8. c语言判断非法字符题目,C语言考试题库之判断题-c语言考试判断题

    <C语言考试题库之判断题-c语言考试判断题>由会员分享,可在线阅读,更多相关<C语言考试题库之判断题-c语言考试判断题(7页珍藏版)>请在人人文库网上搜索. 1.三.判断题(1 ...

  9. 面试加试c语言_经典面试题目C语言

    题一,堆和栈的区别是? 题二,Volatile与Register的区别是? 题三,ARM里的大端格式和小端格式分别是什么意思? 题一答案: (1)存储内容不同 栈:在函数调用时,栈中存放的是函数中(最 ...

最新文章

  1. lua如何打印行号_Lua 字符串处理
  2. QT最方便的LOG库使用Easylogging++,只需要一个头文件
  3. checkbox控件的checked属性作用是_VB6基本控件的使用,制作一个数据输入窗口
  4. mysql在linux只有用空密码_在Linux服务器上配置phpMyAdmin--允许空密码
  5. 共享内存:mmap函数实现
  6. Angular v6 正式发布
  7. C++ STL string字符串替换 replace函数的使用
  8. 2012/10/31的工作总结——潘学
  9. opera Reservation More Fields(接送机)
  10. cmos和ttl_ttl和cmos的区别
  11. 商业逻辑12讲之领导力的逻辑
  12. Elasticsearch中object类型与nested类型之间的区别
  13. ftp服务器匿名用户文件夹,ftp服务器匿名用户文件夹
  14. keil如何添加STM32系列
  15. java spark k-means算法
  16. 硬件基础知识----(1)基本概念
  17. 牛客3007E-立方数-欧拉线性筛+素数分解+二分
  18. transparent(指定透明度)
  19. 矩阵的创建和计算方法
  20. 什么是__name__== “__main__“

热门文章

  1. Linux防火墙禁止ping的方法
  2. 百度的APP能监听你的电话吗?
  3. Octave 软件的安装
  4. 欧姆龙温控器参数笔记(二)(初始设定菜单)
  5. matlab基2时间抽选法,按时间抽取的基2FFT算法分析及MATLAB实现
  6. JAVA计算机毕业设计图书馆借阅系统(附源码、数据库)
  7. linux C语言TCP协议实现镜像服务器,并发服务器,文件传输
  8. 【Python-基础】第五章 转圈圈(杨淑娟)
  9. 大咖们的15条产品方法论,你都知道吗?
  10. SQL Server 2000 安装文件挂起错误的解决办法