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实现二叉树的先序、中序、后序、层序遍历(递归和非递归)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...
随机推荐
- UNIX环境编程学习笔记(15)——进程管理之进程终止
lienhua342014-10-02 1 进程的终止方式 进程的终止方式有 8 种,其中 5 种为正常终止,它们是 1. 从 main 返回. 2. 调用 exit. 3. 调用_exit 或_Ex ...
- 【调研】在总体为n的情况下,多少样本有代表性?
见这里: http://www.raosoft.com/samplesize.html
- 绝对定位多个字居中显示的css
在工作中遇到一种情况,例如把一个div元素绝对定位到一个位置,但是该元素中的文字个数不确定,还要保证始终该文字是居中显示,则可以定义两个div,外层div绝对定位并加一个宽度,内层div居中 .box ...
- IT规划,是否一定要梳理流程
IT规划,是面向企业业务的 IT战略规划,必然需要考虑业务的运营特点和需求.以往为企业提供IT规划咨询服务时,很多企业都提出,IT规划要满足业务的需求,那就要对业务足够熟 悉,而通过梳理流程能够达到这 ...
- 【转】微信公众开发URL和token填写详解
很多人不明白微信公众号开发者中心服务器配置里面的url和token是什么,不会填写.看了教程也不理解是什么,本文详述一下这个问题. 第一步:作为一名微信公众号开发者,别人进入你的微信公众号,肯定会看见 ...
- IE每次关闭都提示IE已停止工作
方法一:打开IE浏览器,点击工具,选择下拉菜单中的internet选项,切换至高级选项卡标签,找到“启用第三方浏览器扩展”选项.把前面的打勾去掉: 方法二:打开IE浏览器,不管是6.0还是更高的版本这 ...
- liunx(centos7 ) 免密码登录
centos7 1.准备两台机器 如:(A机器) 和 (B机器) A机器 删除(.ssh目录下文件 known_hosts) 2. 对两台机器生成密钥 在 (A机器)上执行命令: [root@iZ ...
- 为什么要使用JS模板引擎
我之前在写一个输入联想控件的时候,改过好几个版本,每个版本不是因为性能不好就是因为代码凌乱而被推翻,最后用了understore模板引擎,效果有明显改善.整好这两天在研究互联网技术架构,发现很多的开发 ...
- Linux环境下MySQL设置gbk编码
1 编辑mysql配置文件 vi /etc/my.cnf 2 创建数据库 CREATE DATABASE `XXX` DEFAULT CHARACTER SET gbk COLLATE gbk_chi ...
- Ubuntu Git安装与使用
本系列文章由 @yhl_leo 出品.转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50760140 本文整理和归纳了关于Ub ...