1、递归

递归:程序调用自身的编程技巧称为递归(recursion)。

优点是:代码简洁,易于理解。

缺点是:运行效率较低。

递归思想:把问题分解成规模更小,但和原问题有着相同解法的问题。

1)下面是关于1+2+3+....+n的递归算法:

/// <summary>
/// 1+2+3+....+n的递归算法
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public static int Process1(int i)
{
//计算1+2+3+4+...+100的值
if (i == ) return ;
return Process1(i - ) + i;
}

当i=3的时候,我觉得运算过程可能是这样的(个人理解):

Process2(3- 1) + 3 =

Process2(2 - 1) + 2 + 3 =

Process2(1 - 1) + 1 + 2 + 3 =

最后结果:0 + 1 + 2 + 3 = 6

2)假设有50瓶饮料,喝完3个空瓶可以换一瓶,以此类推,请问总共喝了多少瓶饮料?

public static int Process1(int i,int num)
{
if (i / num == ) return ;
return Process1(i / num + i % num, num) + i;
}

其中 i=50,num=3。结果为:74瓶。

2、非递归

下面是用循环形式非递归代替上面的递归算法:

/// <summary>
/// 1+2+3+....+n的非递归算法
/// </summary>
/// <param name="isum"></param>
/// <returns></returns>
public static int Process2(int isum)
{
int sum = ; for (int i = ; i <= isum; i++)
{
sum += i;
}
return sum;
}

3、公式

后来与同学讨论,发现了更简便的。

public static int Process3(int i)
{
//计算1+2+3+4+...+100的值
return i * (i + ) / ;
}

数学果然很厉害,用了一个公式,既简便又效率。

4、其他递归例子

(1) 斐波那契数列
/// <summary>
/// 斐波那契数列递归算法,用于计算第i位的值
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public static int Process(int i)
{
   //计算1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233.....第i列的值
if (i == ) return ;
if (i == ) return ;
return Process(i - ) + Process(i - );
}

(2)n的阶乘

/// <summary>
/// 1*2*3*....*n的递归算法
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public static int Process(int i)
{
//计算1*2*3*...*n的值
if (i == ) return ;
return Process(i - ) * i;
}

5、最后

下面分享个递归的实际例子(压缩时,查找某个文件夹里所有的文件):C# 压缩文件 ICSharpCode.SharpZipLib.dll


相关文章:C# 冒泡排序

C# 递归与非递归算法与数学公式的更多相关文章

  1. 【转】Java实现折半查找(二分查找)的递归和非递归算法

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wintys.blog.51cto.com/425414/94051 Java二分 ...

  2. 斐波那契数列n项的值。(递归和非递归算法Golang实现)

    递归实现: func f(num int) int { if num == 1 || num == 2 { return 1 } return f(num-1) + f(num-2) } 非递归实现: ...

  3. 数据结构5_java---二叉树,树的建立,树的先序、中序、后序遍历(递归和非递归算法),层次遍历(广度优先遍历),深度优先遍历,树的深度(递归算法)

    1.二叉树的建立 首先,定义数组存储树的data,然后使用list集合将所有的二叉树结点都包含进去,最后给每个父亲结点赋予左右孩子. 需要注意的是:最后一个父亲结点需要单独处理 public stat ...

  4. 二叉树之AVL树的平衡实现(递归与非递归)

    这篇文章用来复习AVL的平衡操作,分别会介绍其旋转操作的递归与非递归实现,但是最终带有插入示例的版本会以递归呈现. 下面这张图绘制了需要旋转操作的8种情况.(我要给做这张图的兄弟一个赞)后面会给出这八 ...

  5. C实现二叉树(模块化集成,遍历的递归与非递归实现)

    C实现二叉树模块化集成 实验源码介绍(源代码的总体介绍):header.h : 头文件链栈,循环队列,二叉树的结构声明和相关函数的声明.LinkStack.c : 链栈的相关操作函数定义.Queue. ...

  6. Java - 二叉树递归与非递归

    树的定义具有递归特性,因此用递归来遍历比较符合特性,但是用非递归方式就比较麻烦,主要是递归和栈的转换. import java.util.Stack; /** * @author 李文浩 * @ver ...

  7. 简单迷宫算法(递归与非递归C++实现)

    假定迷宫如下:1代表墙,0代表道路,起点在(1,1),终点(11,9)(PS:下标从0开始计算). 现在寻求一条路径能从起点到达终点(非最短). 有两种解法:递归与非递归. 递归算法思路: 要用递归, ...

  8. Java二叉树实现及递归与非递归遍历实现

    树的遍历分两种:1.深度优先遍历 1.1 递归算法实现 2.2 非递归算法实现(使用栈存储)2.广度优先遍历(使用队列存储) import java.util.*; /** * 类功能描述: 二叉树遍 ...

  9. Java实现二叉树的先序、中序、后序、层序遍历(递归和非递归)

    二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...

随机推荐

  1. js实现图片粘贴上传到服务器并展示

    最近看了一些有关于js实现图片粘贴上传的demo,实现如下: (这里只能检测到截图粘贴和图片右键复制之后粘贴) demo1: document.addEventListener('paste', fu ...

  2. Mongodb数据结构及与MySql对比

    MySql一直是性价比最高的关系型数据库典范 MongoDB带来了关系数据库以外的NoSql体验. 让我们看一个简单的例子,我们将如何为MySQL(或任何关系数据库)和MongoDB中创建一个数据结构 ...

  3. Unity3D编辑器之不实例化Prefab获取删除更新组件

    原文链接:http://www.xuanyusong.com/archives/3727

  4. Android 应用授权访问GooleDrive

    Refer:https://developers.google.com/drive/auth/android   Go to the Google Cloud Console. Select a pr ...

  5. Nginx以服务方式启动并用定时任务每天备份日志

    1.安装Nginx以服务方式启动: a.下载 instsrv.exe.srvany.exe 以管理员方式启动CMD执行以下命令: instsrv Nginx D:\nginx\srvany.exe b ...

  6. 浏览器端Less

    摘要: 之前项目用过Less,现在负责的项目也要使用,所以就总结下Less,也方便以后查看.本文主要是讲浏览器端如何使用Less. 简介: LESS是一种由Alexis Sellier设计的动态层叠样 ...

  7. winform命名规范

    我们知道Button 常常简称为btn,那么Winform中的其它控件呢,这篇文章在C#的winform控件命名规范 的基础上对一些控件的名称的简称进行了整理. 1. 标准控件 NO. 控件类型简写 ...

  8. 6.824 Lab 5: Caching Extents

    Introduction In this lab you will modify YFS to cache extents, reducing the load on the extent serve ...

  9. POJ 3273 Monthly Expense(二分搜索)

    Description Farmer John is an astounding accounting wizard and has realized he might run out of mone ...

  10. 在Windows系统上搭建aria2下载器

    Aria2是一个命令行下运行.多协议.多来源下载工具(HTTP/HTTPS.FTP.BitTorrent.Metalink),并且支持迅雷离线以及百度云等常用网盘的多线程下载(甚至可以超过专用客户端的 ...