尼奥问题知识百科求经典的递归算法以及案例(可用C#、PHP、JAVA其中一种语言来写)!

求经典的递归算法以及案例(可用C#、PHP、JAVA其中一种语言来写)!

求经典的递归算法以及案例(可用C#、PHP、JAVA其中一种语言来写)!

求经典的递归算法以及案例(可用C#、PHP、JAVA其中一种语言来写)!

我用C#来写(注意,更多的请直接到我的个人博客,点击, http://www.cnblogs.com/serviceboy/archive/2009/07/19/1526590.html,收看) 【例1】有甲、乙、丙、丁四人,从甲开始到丁,一个比一个大1岁,已知丁10岁,问甲几岁?【分析】这是递归法的一道非常典型的题目——因为我们可以很显然知道:假设要计算甲的年龄,那么必须直到乙的年龄;同样,算乙的必须直到丙的,算丙的必须知道丁的,因为丁已知,自然可以往前推算了。现在弊卖衡假设有一个数学模型(函数)可以计算出他们各自的年龄(方便期间我们给他们编号——甲=1,乙=2,丙=3,丁=4),那么存在这一个F(X)函数,X表示某人的编号,其规律如下:F(1)=F(2)+1F(2)=F(3)+1F(3)=F(4)+1F(4)=10显然,直到X=4的时候是一个终止值,其余情况下都是返配者回F(X’),F(X’’)……F(X’’……’),且前者总是比后至大1,这也符合了X’和X总是呈现一定函数关系(设想一下,如果不是等差和等比,又怎么可能在一个递归函数中进行计算?要知道,函数本身就是一个公式表示,既然是公式,那么一定是一种函数关系Y=F(X)),此处显然X和X’的关系是X=X’+1。根据规律式,我们可以写出该递归函数:int AgeCal(int id){if(id==4) return 10;elsereturn (AgeCal(id+1)+1); } 【例2】计算n!【分析】虽然这道题目不像例1一样清晰明了告诉你使用“递归”法反推,但是我们有这样一个常识——n!=(n-1)!*n;(n-1)!=(n-2)!*(n-1)……n=0或1,返回1.显然n与n-1,n-2也是线性的递减数列(等差关系)。其规律如下:F(n)=F(n-1)*nF(n-1)=F(n-2)*(n-1)F(n-2)=F(n-3)*(n-2)……F(1)=1或者F(0)=1(防止别人直接输入0)编写其递归函数,如下:int Fac(int n){if(n==1 || n==0){return 1;}elsereturn Fac(n-1)*n;} 【例3】求一组整数中的最大(小)值(整数是一个int[]数组,个数未知)。【分析】当数字只有两个的时候,我们可以使用>和numbers[1]?numbers[0]:numbers[1]);}else{int[]tempnumbers=new int[numbers.Length-1];for(int i=0;inumbers[numbers.Length-1]? Max(tempnumbers): numbers[numbers.Length-1]}}

本文来自网络,不代表本站立场,转载请注明出处:https://www.niaowenti.com/at/123602.html
上一篇 给教官留言板留言大全
下一篇 韩纪瓷娃娃面膜怎么样