开发者社区> 问答> 正文

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

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

展开
收起
知与谁同 2018-07-15 09:26:04 1951 0
2 条回答
写回答
取消 提交回答
  • Nothing for nothing.
    Java递归算法的小例子 [日期:2010-03-28]来源:Linux社区 作者:java爱好者1+2+3+...+100的结果:public class Test {
    int sum=0;
    int a=1;
    public void sum()
    {
    sum+=a;
    a+=1;
    if(a<=100)
    {
    sum();//调用自身实现递归
    }
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Test test=new Test();
    test.sum();
    System.out.println("计算结果:"+test.sum+"!");
    }
    2019-07-17 22:55:38
    赞同 展开评论 打赏
  • 我用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;
    else
    return (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;
    }
    else
    return Fac(n-1)*n;
    } 【例3】求一组整数中的最大(小)值(整数是一个int[]数组,个数未知)。【分析】当数字只有两个的时候,我们可以使用>和<直接比较;但是当数字超过2个的时候(假设3个),那么我们可以使用一个预订的函数(比如Max(1,2)和3进行比较),由于1,2两个数比较的时候已经得到一个最大值,因此在回代到Max中又变成了两个数的比较。这样,我们可以发现一个规律:F(1,2,3,4……n)=F(1,2,3,4……n-1)和n比较F(1,2,3,4……n-1)=F(1,2,3,4……n-2)和n-1比较……F(1,2,3)=F(1,2)和3比较F(1,2)=结果(并回代)相应的递归函数如下(C#):Code
    int Max(int[]numbers)
    {
    if(numbers.Length==2)
    {
    return (numbers[0]>numbers[1]?numbers[0]:numbers[1]);
    }
    else
    {
    int[]tempnumbers=new int[numbers.Length-1];
    for(int i=0;i<numbers.Length-1;++i)
    {
    tempnumbers[i]=numbers[i];
    }
    return (Max(tempnumbers)>numbers[numbers.Length-1]? Max(tempnumbers): numbers[numbers.Length-1]
    }
    }
    2019-07-17 22:55:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载