c递归函数详细介绍及使用方法.doc

c递归函数详细介绍及使用方法.doc

ID:53278732

大小:31.50 KB

页数:11页

时间:2020-04-02

c递归函数详细介绍及使用方法.doc_第1页
c递归函数详细介绍及使用方法.doc_第2页
c递归函数详细介绍及使用方法.doc_第3页
c递归函数详细介绍及使用方法.doc_第4页
c递归函数详细介绍及使用方法.doc_第5页
资源描述:

《c递归函数详细介绍及使用方法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C#递归函数详细介绍及使用方法什么是递归函数/方法?任何一个方法既可以调用其他方法也可以调用自己,而当这个方法调用自己时,我们就叫它递归函数或递归方法。通常递归有两个特点:1.递归方法一直会调用自己直到某些条件被满足2.递归方法会有一些参数,而它会把一些新的参数值传递给自己。那什么是递归函数?函数和方法没有本质区别,但函数仅在类的内部使用。以前C#中只有方法,从.NET3.5开始才有了匿名函数。所以,我们最好叫递归方法,而非递归函数,本文中将统一称之为递归。在应用程序中为什么要使用递归?何时使用递归?如何用?“写任何一个程序可以用赋值和if-then-else语句表示出来,而whil

2、e语句则可以用赋值、if-then-else和递归表示出来。”(出自EllisHorowitz的《数据结构基础(C语言版)》-FundamentalsofDataStructureinC)递归解决方案对于复杂的开发来说很方便,而且十分强大,但由于频繁使用调用栈(callstack)可能会引起性能问题(有些时候性能极差)。我们来看一看下面这个图:调用栈图示下面我打算介绍一些例子来帮助你更好的理解递归的风险和回报。1.阶乘阶乘(!)是小于某个数的所有正整数的乘积。0!=11!=12!=2*1!=23!=3*2!=6...n!=n*(n-1)!下面是计算阶乘的一种实现方法(没有递归):.代

3、码如下:publiclongFactorial(intn){if(n==0)return1;longvalue=1;for(inti=n;i>0;i--){value*=i;}returnvalue;}下面是用递归的方法实现计算阶乘,与之前的代码比起来它更简洁。.代码如下:publiclongFactorial(intn){if(n==0)//限制条件,对该方法调用自己做了限制return1;returnn*Factorial(n-1);}你知道的,n的阶乘实际上是n-1的阶乘乘以n,且n>0。它可以表示成Factorial(n)=Factorial(n-1)*n这是方法的返回值,但

4、我们需要一个条件如果n=0返回1。现在这个程式的逻辑应该很清楚了,这样我们就能够轻易的理解。2.Fibonacci数列Fibonacci数列是按以下顺序排列的数字:0,1,1,2,3,5,8,13,21,34,55,…如果F0=0并且F1=1那么Fn=Fn-1+Fn-2下面的方法就是用来计算Fn的(没有递归,性能好).代码如下:publiclongFib(intn){if(n<2)returnn;long[]f=newlong[n+1];f[0]=0;f[1]=1;for(inti=2;i<=n;i++){f[i]=f[i-1]+f[i-2];}returnf[n];}如果我们使用递

5、归方法,这个代码将更加简单,但性能很差。.代码如下:publiclongFib(intn){if(n==0

6、

7、n==1)//满足条件returnn;returnFib(k-2)+Fib(k-1);}3.布尔组合有时我们需要解决的问题比Fibonacci数列复杂很多,例如我们要枚举所有的布尔变量的组合。换句话说,如果n=3,那么我们必须输出如下结果:true,true,truetrue,true,falsetrue,false,truetrue,false,falsefalse,true,truefalse,true,falsefalse,false,truefalse,false,f

8、alse如果n很大,且不用递归是很难解决这个问题的。.代码如下:publicvoidCompositionBooleans(stringresult,intcounter){if(counter==0)return;bool[]booleans=newbool[2]{true,false};for(intj=0;j<2;j++){StringBuilderstringBuilder=newStringBuilder(result);stringBuilder.Append(string.Format("{0}",booleans[j].ToString())).ToString();

9、if(counter==1)Console.WriteLine(stringBuilder.ToString());CompositionBooleans(stringBuilder.ToString(),counter-1);}}现在让我们来调用上面这个方法:.代码如下:CompositionBoolean(string.Empty,3);IanShlasko建议我们这样使用递归:.代码如下:publicvoidBooleanCompositions(i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。