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实现二叉树的先序、中序、后序、层序遍历(递归和非递归)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...
随机推荐
- 浏览器兼容css
原文:https://www.cnblogs.com/shizk/p/8459362.html 1.为什么会出现浏览器兼容问题? 由于各大主流浏览器由不同的厂家开发,所用的核心架构和代码也很难重和,这 ...
- C# WORD操作实现代码(转载)
在当前项目开发过程中,客户有根据数据库数据生成WORD文档的需求,在和同事沟通的过程中,找到了两个解决方案 1.先通过程序生成报表样式的HTML页面,然后修改HTML页面的后缀名为DOC. 2.定制W ...
- 安卓开发笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)
菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 菜单的实现 ...
- php创建文件夹
$dir = iconv("UTF-8", "GBK", "Public/bookcover"); if (!file_exists($di ...
- Android Studio使用技巧小记
1.Android Studio中查看genymotion模拟器中的文件的方法: Tools-->Android Device Moniter 2.快速定位开源代码某功能的实现方法 右击项目-- ...
- WebGL Matrix4(4*4矩阵库)
Matrix4是由<<WebGL编程指南>>作者写的提供WebGL的4*4矩阵操作的方法库,简化我们编写的代码.源代码共享地址,点击链接:Matrix4源代码. 下面罗列了Ma ...
- 在AD的环境下,更改计算机名导致TFS,无法连接解决办法
D:\vs2015>tf workspaces /collection:http://10.1.0.104:8080/tfs/dahua.adrms /updateComputerName:WI ...
- pycharm 对代码做静态检查
对于下面这种情况,java c这些提前编译的语言,不给你运行机会就立马报错了,但对于动态语言运行之后才能报错,用运行的方法来检查代码错误是在是太坑了,这是py对比静态语言的巨大劣势,尤其是代码文件多行 ...
- Connect to a ROS Network---2
原创博文:转载请标明出处(周学伟):http://www.cnblogs.com/zxouxuewei/tag/ 一.Introduction ROS网络由单个ROS主机和多个ROS节点组成. ROS ...
- [Scikit-learn] 2.5 Dimensionality reduction - ICA
理论学习: 独立成分分析ICA历史 Ref: Lecture 15 | Machine Learning (Stanford) - NG From: https://wenku.baidu.com/v ...