当前位置: 首页 > news >正文

io流2

                                                   递归

      昨天描述了io流的一系列操作,今天来讲一讲递归,前面我们写了很多算法,有很多都可以递归实现,递归简化了代码,比如说n的阶乘,是一种很很好用的编程技巧,

递归典型问题: 梵塔问题(汉诺塔问题)
已知有三根针分别用A, B, C表示,在A中从上到下依次放n个从小到大的盘子,现要求把所有的盘子
从A针全部移到B针,移动规则是:可以使用C临时存放盘子,每次只能移动一块盘子,而且每根针上
不能出现大盘压小盘,找出移动次数最小的方案.
/*Name:HANOITOWER
*Description:solvethehanoitowerproblembyrecursion
*/
#include<stdio.h>
#include<stdlib.h>
/*movenplates:from-->to,
*thebuffercanbeusedifneeded*/
inthanoi(intn,charfrom,charbuffer,charto)
{
    if(n==1)
    {
        /*movetheNO.1platedirectly:from-->to*/
        printf("Moveplate#%dfrom%cto%c\n",n,from,to);
        /*theNO.1plateismovedsoreturn*/
        return0;
    }
    else
    {
        /*nplatestobemoved:from-->to,
        *movethen-1platesabove:from-->buffer,
        *givethistasktothenextrecursion*/
        hanoi(n-1,from,to,buffer);
        /*then-1platesaboveweremovedtobuffer,
        *sotheNO.nplatecanbemoveddirectly*/
        printf("Moveplate#%dfrom%cto%c\n",n,from,to);
        /*howeverthen-1platesarestillinbuffer,
        *movethemtotheterminalposition,
        *(the"from"positionhasnoplate,&canbeoneso-calledbuffer)*/
        hanoi(n-1,buffer,from,to);
        /*thetaskgivenisdonesoreturn*/
        return0;
    }
}
intmain()
{
#defineN4
    /*NplatesinA,let'smovethemtoC*/
    hanoi(N,'A','B','C');
    return0;
}

 

递归分为两种,一种是直接递归,一种是间接递归,个人觉着递归并不是所有情况下都可以用,好使就用。

转载于:https://www.cnblogs.com/jingyukeng/p/8927675.html

相关文章:

  • 图文剖析自己定义View的绘制(以自己定义滑动button为例)
  • 项目策划的原则
  • zabbix使用web界面设置邮件报警
  • 大牛地址
  • 查询MySQL某字段相同值得重复数据
  • js 数字转换成带逗号的显示方式
  • Apache 修改登录账户
  • 2017-2018工作总结(更新中)
  • UVA - 1205 Color a Tree
  • 《JavaScript DOM 编程艺术(第2版)》- 综合笔记
  • 背包问题(贪心算法)
  • 多选输出
  • ubuntu系统美化备忘
  • zookeeper安装教程
  • android--------自定义控件 之 ViewGroup
  • JavaScript-如何实现克隆(clone)函数
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • javascript数组去重/查找/插入/删除
  • PHP CLI应用的调试原理
  • PHP面试之三:MySQL数据库
  • Redis中的lru算法实现
  • Service Worker
  • win10下安装mysql5.7
  • 动态规划入门(以爬楼梯为例)
  • 使用common-codec进行md5加密
  • 突破自己的技术思维
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # 透过事物看本质的能力怎么培养?
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #考研#计算机文化知识1(局域网及网络互联)
  • (9)STL算法之逆转旋转
  • (BFS)hdoj2377-Bus Pass
  • (rabbitmq的高级特性)消息可靠性
  • (二)WCF的Binding模型
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (三)c52学习之旅-点亮LED灯
  • (五)IO流之ByteArrayInput/OutputStream
  • (译)2019年前端性能优化清单 — 下篇
  • (原)Matlab的svmtrain和svmclassify
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • **CI中自动类加载的用法总结
  • .NET大文件上传知识整理
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @Builder用法
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @RequestParam详解
  • [Angular] 笔记 18:Angular Router
  • [asp.net core]project.json(2)
  • [BUUCTF 2018]Online Tool(特详解)