c递归函数详细介绍及使用方法_计算机-.NET.pdf
《c递归函数详细介绍及使用方法_计算机-.NET.pdf》由会员分享,可在线阅读,更多相关《c递归函数详细介绍及使用方法_计算机-.NET.pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品资料 欢迎下载 C#递归函数详细介绍及使用方法 什么是递归函数/方法?任何一个方法既可以调用其他方法也可以调用自己,而当这个方法调用自己时,我们就叫它递归函数或递归方法。通常递归有两个特点:1.递归方法一直会调用自己直到某些条件被满足 2.递归方法会有一些参数,而它会把一些新的参数值传递给自己。那什么是递归函数?函数和方法没有本质区别,但函数仅在类的内部使用。以前 C#中只有方法,从.NET 3.5 开始才有了匿名函数。所以,我们最好叫递归方法,而非递归函数,本文中将统一称之为递归。在应用程序中为什么要使用递归?何时使用递归?如何用?“写任何一个程序可以用赋值和 if-then-else语
2、句表示出来,而 while 语句则可以用赋值、if-then-else和递归表示出来。”(出自 Ellis Horowitz 的数据结构基础(C 语言版)-Fundamentals of Data Structure in C)递归解决方案对于复杂的开发来说很方便,而且十分强大,但由于频繁使用调用栈(call stack)可能会引起性能问题(有些时候性能极差)。我们来看一看下面这个图:精品资料 欢迎下载 调用栈图示 下面我打算介绍一些例子来帮助你更好的理解递归的风险和回报。1.阶乘 阶乘(!)是小于某个数的所有正整数的乘积。0!=1 1!=1 2!=2*1!=2 3!=3*2!=6 .n!=n
3、*(n-1)!下面是计算阶乘的一种实现方法(没有递归):.代码如下:public long Factorial(int n)if(n=0)return 1;long value=1;for(int i=n;i 0;i-)用自己而当这个方法调用自己时我们就叫它递归函数或递归方法通常递归有两个特点递归方法一直会调用自己直到某些条件被满足递归方法会有一些参数而它会把一些新的参数值传递给自己那什么是递归函数函数和方法没有本质区将统一称之为递归在应用程序中为什么要使用递归何时使用递归如何用写任何一个程序可以用赋值和语句表示出来而语句则可以用赋值和递归表示出来出自的数据构基础语言版递归解决方案对于复杂的开
4、发来说很方便而且十分强大图示下面我打算介绍一些例子来帮助你更好的理解递归的风险和回报阶乘阶乘是小于某个数的所有正整数的乘积下面是计算阶乘的一种实现方法没有递归代码如下精品资料欢迎下载下面是用递归的方法实现计算阶乘与之前的代码比精品资料 欢迎下载 value*=i;return value;下面是用递归的方法实现计算阶乘,与之前的代码比起来它更简洁。.代码如下:public long Factorial(int n)if(n=0)/限制条件,对该方法调用自己做了限制 return 1;return n*Factorial(n-1);你知道的,n 的阶乘实际上是 n-1的阶乘乘以 n,且 n0。它
5、可以表示成 Factorial(n)=Factorial(n-1)*n 这是方法的返回值,但我们需要一个条件 如果 n=0 返回 1。现在这个程式的逻辑应该很清楚了,这样我们就能够轻易的理解。2.Fibonacci 数列 Fibonacci 数列是按以下顺序排列的数字:0,1,1,2,3,5,8,13,21,34,55,如果F0=0 并且 F1=1 那么Fn=用自己而当这个方法调用自己时我们就叫它递归函数或递归方法通常递归有两个特点递归方法一直会调用自己直到某些条件被满足递归方法会有一些参数而它会把一些新的参数值传递给自己那什么是递归函数函数和方法没有本质区将统一称之为递归在应用程序中为什么要
6、使用递归何时使用递归如何用写任何一个程序可以用赋值和语句表示出来而语句则可以用赋值和递归表示出来出自的数据构基础语言版递归解决方案对于复杂的开发来说很方便而且十分强大图示下面我打算介绍一些例子来帮助你更好的理解递归的风险和回报阶乘阶乘是小于某个数的所有正整数的乘积下面是计算阶乘的一种实现方法没有递归代码如下精品资料欢迎下载下面是用递归的方法实现计算阶乘与之前的代码比精品资料 欢迎下载 Fn-1+Fn-2 下面的方法就是用来计算 Fn 的(没有递归,性能好).代码如下:public long Fib(int n)if(n 2)return n;long f=new longn+1;f0=0;f1
7、=1;for(int i=2;i=n;i+)fi=fi-1+fi-2;return fn;如果我们使用递归方法,这个代码将更加简单,但性能很差。.代码如下:用自己而当这个方法调用自己时我们就叫它递归函数或递归方法通常递归有两个特点递归方法一直会调用自己直到某些条件被满足递归方法会有一些参数而它会把一些新的参数值传递给自己那什么是递归函数函数和方法没有本质区将统一称之为递归在应用程序中为什么要使用递归何时使用递归如何用写任何一个程序可以用赋值和语句表示出来而语句则可以用赋值和递归表示出来出自的数据构基础语言版递归解决方案对于复杂的开发来说很方便而且十分强大图示下面我打算介绍一些例子来帮助你更好的
8、理解递归的风险和回报阶乘阶乘是小于某个数的所有正整数的乘积下面是计算阶乘的一种实现方法没有递归代码如下精品资料欢迎下载下面是用递归的方法实现计算阶乘与之前的代码比精品资料 欢迎下载 public long Fib(int n)if(n=0|n=1)/满足条件 return n;return Fib(k-2)+Fib(k-1);3.布尔组合 有时我们需要解决的问题比Fibonacci 数列复杂很多,例如我们要枚举所有的布尔变量的组合。换句话说,如果 n=3,那么我们必须输出如下结果:true,true,true true,true,false true,false,true true,false
9、,false false,true,true false,true,false false,false,true false,false,false 如果 n 很大,且不用递归是很难解决这个问题的。.代码如下:public void CompositionBooleans(string result,int counter)用自己而当这个方法调用自己时我们就叫它递归函数或递归方法通常递归有两个特点递归方法一直会调用自己直到某些条件被满足递归方法会有一些参数而它会把一些新的参数值传递给自己那什么是递归函数函数和方法没有本质区将统一称之为递归在应用程序中为什么要使用递归何时使用递归如何用写任何一个
10、程序可以用赋值和语句表示出来而语句则可以用赋值和递归表示出来出自的数据构基础语言版递归解决方案对于复杂的开发来说很方便而且十分强大图示下面我打算介绍一些例子来帮助你更好的理解递归的风险和回报阶乘阶乘是小于某个数的所有正整数的乘积下面是计算阶乘的一种实现方法没有递归代码如下精品资料欢迎下载下面是用递归的方法实现计算阶乘与之前的代码比精品资料 欢迎下载 if(counter=0)return;bool booleans=new bool2 true,false;for(int j=0;j 2;j+)StringBuilder stringBuilder=new StringBuilder(resu
11、lt);stringBuilder.Append(string.Format(0,booleansj.ToString().ToString();if(counter=1)Console.WriteLine(stringBuilder.ToString();CompositionBooleans(stringBuilder.ToString(),counter-1);现在让我们来调用上面这个方法:.代码如下:CompositionBoolean(string.Empty,3);Ian Shlasko建议我们这样使用递归:.代码如下:用自己而当这个方法调用自己时我们就叫它递归函数或递归方法通常递
12、归有两个特点递归方法一直会调用自己直到某些条件被满足递归方法会有一些参数而它会把一些新的参数值传递给自己那什么是递归函数函数和方法没有本质区将统一称之为递归在应用程序中为什么要使用递归何时使用递归如何用写任何一个程序可以用赋值和语句表示出来而语句则可以用赋值和递归表示出来出自的数据构基础语言版递归解决方案对于复杂的开发来说很方便而且十分强大图示下面我打算介绍一些例子来帮助你更好的理解递归的风险和回报阶乘阶乘是小于某个数的所有正整数的乘积下面是计算阶乘的一种实现方法没有递归代码如下精品资料欢迎下载下面是用递归的方法实现计算阶乘与之前的代码比精品资料 欢迎下载 public void Boolea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 递归 函数 详细 介绍 使用方法 计算机 NET
限制150内