1  概述

本篇文章主要分享算法部分——递归算法,本文简要讲解几个经典的递归算个发,即乘法阶乘、汉诺塔和斐波那契数列。

2  讲解部分

2.1  乘法阶乘

问题:求n!

分析:

0!=1;

n!=nx(n-1)!

code:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ConseDemo
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13            string inputParm=Console.ReadLine();//从控制台输入参数
14            int n = Int32.Parse(inputParm);
15             Console.WriteLine(JieChengRecursive(n));
16             Console.Read();
17         }
18
19         /// <summary>
20         /// 求n!
21         /// </summary>
22         /// <param name="n">传入的参数n</param>
23         /// <returns>返回阶乘n的结果</returns>
24        public static  int JieChengRecursive(int n)
25         {
26             int sum = 1;
27             if (n >= 2)
28             {
29                 sum = n * JieChengRecursive(n - 1);
30             }
31             else
32             {
33                 return 1;
34             }
35             return sum;
36         }
37     }
38 }

2.2  汉诺塔

问题:有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘,大盘不能叠在小盘上面


    提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。
    问:如何移?最少要移动多少次?

 1      static void hannoi(int n, char from, char buffer, char to)
 2         {
 3             if (n == 1)
 4             {
 5                 Console.WriteLine("Move Disk:{0},from,{1},to,{2}", n, from, to);
 6             }
 7             else
 8             {
 9                 hannoi(n - 1, from, to, buffer);
10                 Console.WriteLine("Move Disk:{0},from,{1},to,{2}", n, from, to);
11                 hannoi(n - 1, buffer, from, to);
12             }
13         }

科普:

最早发明这个问题的人是法国数学家爱德华·卢卡斯。

传说印度某间寺院有三根柱子,上串64个金盘。寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子;预言说当这些盘子移动完毕,世界就会灭亡。这个传说叫做梵天寺之塔问题(Tower of Brahma puzzle)。但不知道是卢卡斯自创的这个传说,还是他受他人启发。
若传说属实,僧侣们需要264 ? 1步才能完成这个任务;若他们每秒可完成一个盘子的移动,就需要5849亿年才能完成。整个宇宙现在也不过137亿年。
这个传说有若干变体:寺院换成修道院、僧侣换成修士等等。寺院的地点众说纷纭,其中一说是位于越南的河内,所以被命名为“河内塔”。另外亦有“金盘是创世时所造”、“僧侣们每天移动一盘”之类的背景设定。
佛教中确实有“浮屠”(塔)这种建筑;有些浮屠亦遵守上述规则而建。“河内塔”一名可能是由中南半岛在殖民时期传入欧洲的。

2.3  斐波那契数列

问题:斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …
    特别指出:第0项是0,第1项是第一个1。这个数列从第二项开始,每一项都等于前两项之和。

分析:

f(0)=0;

f(1)=1;

f(n)=f(n-1)+f(n-2);

code:

 1 int Fib(int n)
 2         {
 3             if (n < 1)
 4             {
 5                 return 0;
 6             }
 7             if (n == 1 || n == 2)
 8             {
 9                 return 1;
10             }
11             return Fib(n - 1) + Fib(n - 2);
12         }

2.4  总结

关于递归算法,注意两个条件:(1)循环调用函数    (2)函数结束临界条件

3   版权

  • 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
  • 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2016177728@qq.com。
  • 可以转载该博客,但必须著名博客来源。

转载于:https://www.cnblogs.com/wangjiming/p/7203669.html

【算法系列】之递归算法相关推荐

  1. 算法优化:递归算法的优化策略

    算法优化:递归算法的优化策略 在处理算法问题时候,用的非常多的一种策略就是递归算法了.但是递归算法虽然简单有效,但是该算法的算法效果总是有点差强人意.本文主要讲述从两个方向优化递归算法,希望本文能给读 ...

  2. 白话经典算法系列之七 堆与堆排序

     堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先解说下什么是数据结构中的二叉堆. 二叉堆的定义 二叉堆是全然二叉树或者是近似全然二叉树. 二叉堆满 ...

  3. 算法系列之二十:计算中国农历(二)

    (接上篇) 所谓的"天文算法",就是利用经典力学定律推导行星运转轨道,对任意时刻的行星位置进行精确计算,从而获得某种天文现象发生时的时间,比如日月合朔这一天文现象就是太阳和月亮的地 ...

  4. leetcode17. 电话号码的字母组合--每天刷一道leetcode算法系列!

    作者:reed,一个热爱技术的斜杠青年,程序员面试联合创始人 前文回顾: leetcode1. 两数之和--每天刷一道leetcode系列! leetcode2. 两数相加--每天刷一道leetcod ...

  5. 大数据算法系列——布隆过滤器

    大数据算法系列--布隆过滤器 一.简介 Bloom filter介绍 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集 ...

  6. 【算法系列 二】Stack

    为什么80%的码农都做不了架构师?>>>    栈应用的场景: 1.括号问题 2.后缀表达式 3.深度优先遍历 4.保存现场 1. 给定字符串,仅由"()[]{}" ...

  7. 算法系列15天速成——第十天 栈

    原文:算法系列15天速成--第十天 栈 今天跟大家聊聊栈,在程序设计中,栈的使用还是非常广泛的,比如有"括号匹配问题","html结构匹配问题". 所以说掌握了 ...

  8. 基本算法系列15天速成

    算法系列15天速成--第一天 七大经典排序[上] 算法系列15天速成--第二天 七大经典排序[中] 算法系列15天速成--第三天 七大经典排序[下] 算法系列15天速成--第四天 五大经典查找[上] ...

  9. 【深度学习】快照集成等网络训练优化算法系列

    [深度学习]快照集成等网络训练优化算法系列 文章目录 1 什么是快照集成? 2 什么是余弦退火学习率? 3 权重空间中的解决方案 4 局部与全局最优解 5 特别数据增强 6 机器学习中解决数据不平衡问 ...

  10. 精通八大排序算法系列:二、堆排序算法

    精通八大排序算法系列:二.堆排序算法 作者:July .二零一一年二月二十日 本文参考:Introduction To Algorithms,second edition. ------------- ...

最新文章

  1. MATLAB 只是冰山一角!一个海外资深程序员聊被卡脖子……
  2. Oracle 创建数据表以及对数据表、字段、主外键、约束的操作
  3. js_______与||的区别
  4. Java集合:HashMap线程不安全?有哪些表现?
  5. 一键移植工具_让UI设计畅通无阻 — 信息系统人机界面增强工具(HFE Designer)
  6. Java探索之旅(6)——对象和类
  7. python基础语法类型_Python基本语法[2]-简单数据类型,基础
  8. servlet-api-2.5.jar - jar not loaded
  9. Java的三种技术架构是什么?
  10. 微信公众号H5页面:禁止分享操作
  11. win10电脑磁盘占用百分百,电脑优化
  12. 怎样在电脑中添加pdf打印机 添加pdf打印机的方法
  13. VBA: 字典的介绍与实例
  14. 剑英陪你玩转图形学(一)打通任督二脉
  15. Python中的PIL给图片添加文字
  16. 这几款真香旗舰机,买到就是赚到,有你入手了的吗?
  17. STM32---c语言指针1
  18. 移动端点击出现蓝色框的解决方案
  19. 计算机组成原理指令系统的设计,计算机组成原理与系统设计
  20. (65)-- 爬取58交友信息

热门文章

  1. RabbitMQ·入门·壹
  2. chrome扩展通信
  3. java-php-python-超市货品进销存系统后台计算机毕业设计
  4. 深度学习分布式方案(个人笔记)
  5. L0、L1与L2范数、核范数
  6. 解决aspera 下载ENA 数据报错Session Stop (Error: Client unable to connect to server (check UDP port and fire
  7. 浏览器发起请求到服务器处理请求的过程
  8. 疫情加速下,「数字化」再探本地生活
  9. python买苹果改进
  10. PostgeSQL修改数据库名称