C# 递归与非递归算法与数学公式
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、其他递归例子
/// <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# 递归与非递归算法与数学公式的更多相关文章
- 【转】Java实现折半查找(二分查找)的递归和非递归算法
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wintys.blog.51cto.com/425414/94051 Java二分 ...
- 斐波那契数列n项的值。(递归和非递归算法Golang实现)
递归实现: func f(num int) int { if num == 1 || num == 2 { return 1 } return f(num-1) + f(num-2) } 非递归实现: ...
- 数据结构5_java---二叉树,树的建立,树的先序、中序、后序遍历(递归和非递归算法),层次遍历(广度优先遍历),深度优先遍历,树的深度(递归算法)
1.二叉树的建立 首先,定义数组存储树的data,然后使用list集合将所有的二叉树结点都包含进去,最后给每个父亲结点赋予左右孩子. 需要注意的是:最后一个父亲结点需要单独处理 public stat ...
- 二叉树之AVL树的平衡实现(递归与非递归)
这篇文章用来复习AVL的平衡操作,分别会介绍其旋转操作的递归与非递归实现,但是最终带有插入示例的版本会以递归呈现. 下面这张图绘制了需要旋转操作的8种情况.(我要给做这张图的兄弟一个赞)后面会给出这八 ...
- C实现二叉树(模块化集成,遍历的递归与非递归实现)
C实现二叉树模块化集成 实验源码介绍(源代码的总体介绍):header.h : 头文件链栈,循环队列,二叉树的结构声明和相关函数的声明.LinkStack.c : 链栈的相关操作函数定义.Queue. ...
- Java - 二叉树递归与非递归
树的定义具有递归特性,因此用递归来遍历比较符合特性,但是用非递归方式就比较麻烦,主要是递归和栈的转换. import java.util.Stack; /** * @author 李文浩 * @ver ...
- 简单迷宫算法(递归与非递归C++实现)
假定迷宫如下:1代表墙,0代表道路,起点在(1,1),终点(11,9)(PS:下标从0开始计算). 现在寻求一条路径能从起点到达终点(非最短). 有两种解法:递归与非递归. 递归算法思路: 要用递归, ...
- Java二叉树实现及递归与非递归遍历实现
树的遍历分两种:1.深度优先遍历 1.1 递归算法实现 2.2 非递归算法实现(使用栈存储)2.广度优先遍历(使用队列存储) import java.util.*; /** * 类功能描述: 二叉树遍 ...
- Java实现二叉树的先序、中序、后序、层序遍历(递归和非递归)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...
随机推荐
- java rpc
一.简介 Hessian和Burlap是由Caucho Technology提供的基于HTTP协议的轻量级远程服务解决方案.他们都致力于借助尽可能简单那的API和通信协议来简化Web服务. He ...
- Link1123:转换到COFF期间失败:文件无效或损坏
当在编译VS项目时,出现如下错误: 这个错误,表明在连接阶段出错.COFF为Common Object File Format,通用对象文件格式,它的出现为混合语言编程带来方便 ...
- C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation
C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation 后台添加以下方法:/// <summa ...
- UIImage 读取图片内存优化
在图片处理时,我们总会遇到一些内存优化的问题. 这里介绍的是其中一种内存优化处理方式. 场景: App 运行很卡,然后我用 Instruments 中的相关工具查看对象的内存占用情况,发现当图片加载 ...
- 从debian9、ubuntu18.04的deb包依赖来看,似乎不是那么好!!
i386体系的依赖.典型的libuuid1依赖问题,需要downgrade保持版本一致! amd64的rpm依赖低版本的perl-base,需要downgrade保持版本一致!
- struts2危险漏洞解决方法
原创,bgy编写.2013-07-24 前文: 随着苹果开发者网站的沦陷,已经曝光一周的Apache Struts2漏洞再次成为热门话题,今天有消息称由于该漏洞被利用,淘宝的数据库已经被盗,尽管淘宝官 ...
- Windbg在软件调试中的应用
Windbg在软件调试中的应用 Windbg是微软提供的一款免费的,专门针对Windows应用程序的调试工具.借助于Windbg, 我们常见的软件问题:软件异常,死锁,内存泄漏等,就可以进行高效的排查 ...
- phpcms v9 get的强大之处(列表页调用点击数)
{pc:get sql="select * from v9_art as g left join v9_art_data as p on p.id=g.id and g.catid=12 o ...
- Apache伪静态配置,支持.htaccess配置方法
第一.编辑httpd.conf文件 A - 在etc/httpd/conf/目录下的httpd.conf 文件,找到: LoadModule rewrite_module modules/mod_re ...
- Oauth2.0(一):为什么需要 Oauth2.0 协议?
假设有两家互联网企业 A 和 B,其中 B 是一家提供相片云存储的公司.即 B 的用户可以把相片上传到 B 网站上长期保存,然后可以在不同的设备上查看.某一天,A 和 B 谈成了一项合作:希望 B 用 ...