数据结构与算法笔记 lesson 15 递归
来源:互联网 发布:腾讯高级php面试题 编辑:程序博客网 时间:2024/06/06 01:33
递归
效率比较低,万不得已不用递归,用迭代(循环)
文件夹索引操作
迭代使用的是循环结构, 递归使用的选择结构
使用递归能使程序的结构更清晰,更简洁,更容易让人理解。
大量的递归调用会建立函数的副本,会消耗大量的时间和内存
例:
编写一个递归函数,实现将输入的任意长度的字符串反向输出(‘#作为输入结束条件’)
void print(){ char a ; scanf("%c",&a); if(a!='#') printf(); if(a!='#') printf("%c",a);}
分治思想
一问题规模较大且不易求解的时候,就可以考虑将问题分成几个小的模块,逐一解决
采用分治思想处理问题,其各个小模块通常具有与大问题相同的结构。
汉诺塔
思路
先将前63个盘子移动到Y上,确保大盘在小盘下。
再将最底下的第64个盘子移动到Z上
最后将Y上的63个盘子移动到Z上
第1步是将1~63个盘子借助Z移动到Y上,
第3步将Y针上的63个盘子借助X移动到Z针上。
解决第1步:
先将前62个盘子移动到Z上,确保大盘在小盘下。
再将最底下的第63个盘子移动到Y上
最后将Z上的62个盘子移动到Y上
解决第3步:
先将前62个盘子移动到X上,确保大盘在小盘下。
再将最底下的第63个盘子移动到Z上
最后将Z上的62个盘子移动到Y上
#include<stdio.h>//入参n, x,y,z 分别为 把n个盘子从 x 借助 y 移动到 z 上void move(int n, char x, char y, char z){if (1 == n){printf("%c-->%c\n", x, z); //最后一步,把x上的最后一个盘子移动到z上}else{move(n - 1, x, z, y); //将n-1个盘子从x借助z移动到y上printf("%c-->%c\n", x, z); //将第n个盘子从x移动到z上move(n - 1, y, x, z); //将n-1个盘子从y借助x移动到z上}}int main(){int n; printf("请输入汉诺塔的层数:");scanf("%d", &n);printf("移动的步骤如下:\n");move(n, 'X', 'Y', 'Z');return 0;}
0 0
- 数据结构与算法笔记 lesson 15 递归
- 数据结构与算法笔记 lesson 9 栈
- 数据结构与算法笔记 lesson 13 队列
- 数据结构与算法笔记 lesson 18 树
- 数据结构与算法笔记 lesson 17 字符串匹配算法
- 数据结构与算法笔记 lesson 10 栈 二进制转换十进制
- 数据结构与算法笔记 lesson 11 逆波兰计算器
- 数据结构与算法笔记 lesson 14 循环队列
- 数据结构与算法笔记 lesson 16 八皇后问题
- 数据结构与算法笔记 lesson 19 二叉树
- 数据结构与算法笔记 lesson 20 二叉树遍历
- 数据结构与算法笔记 lesson 21 线索二叉树
- 数据结构与算法分析笔记:第一章:递归
- 《数据结构与算法》学习笔记21 递归_消除递归
- 数据结构与算法笔记 lesson 22 树与二叉树的转换与赫夫曼树
- 【数据结构与算法】递归
- 数据结构与算法笔记 lesson 12 中缀表达式转后缀表达式
- 数据结构与算法分析笔记(4)——递归
- Vue.js 和 MVVM 小细节
- 如何使用QEMU来编译打包armhf/arm64的snap包
- Qt 表格&列表数据驱动化(c++)
- 知识库--Parsing the Request & Headers
- openCV打开树莓派原装CSI摄像头
- 数据结构与算法笔记 lesson 15 递归
- openstack热迁移机制分析(libvirt热迁移模型、nova热迁移控制逻辑、调试方法)
- DB主从一致性的几种解决方法
- 100道动态规划——17 UVA 10934 Dropping water balloons 猜数问题
- Cockroach Design 翻译 ( 七) 冲突解决方案
- 从印度增长最快的在线教育公司窥视印度在线教育行业现状
- request.getAttribute()与request.setAttribute()与session.setAttribute()
- IOS开发笔记7-C语言基础复习
- Cockroach Design 翻译 ( 八) 严格序列化(线性化)