zoukankan      html  css  js  c++  java
  • 递归的应用

                 作业一

    1)使用组合数公式利用n!来计算

    设计思想

    先写出计算阶乘的函数,这个函数运用了递归的方法,

    然后再根据公式求出组合数。

    程序流程图

     

    程序源代码

    import java.util.Scanner;
    
     
    
    public class Combination_N {
    
    public static void main(String[] args)
    
    {
    
        int up_num=1,down_num=1;//up_num表示组合数的上数,down_num表示组合输的下数
    
        Scanner scanner=new Scanner (System.in);
    
        while(true)
    
        {
    
        System.out.println("请输入组合数上边的数");
    
        if(scanner.hasNextInt())
    
           up_num=scanner.nextInt();
    
        System.out.println("请输入组合数下边的数");
    
        if(scanner.hasNextInt())
    
           down_num=scanner.nextInt();
    
        System.out.println(combin(up_num,down_num));
    
        }
    
    }
    
    public static int factorial (int n)//求N!
    
    {
    
        if(n>1)
    
           return factorial(n-1)*n;
    
        else
    
           return 1;
    
    }
    
    public static int combin(int up,int down)//求组合数
    
    {
    
        return factorial(down)/(factorial(up)*factorial(down-up));
    
    }
    
    }

    程序截图

     

    2)使用递推的方法用杨辉三角形计算

    程序设计思想

    创建二维数组,运用杨辉三角的思想递推求组合数

     程序流程图

    源代码

        import java.util.Scanner;
    public class Zuheshu3 {
            public static void main(String[] args)
            {
                Scanner scanner =new Scanner(System.in);
                int up_num=1,down_num=1;//up_num表示组合数的上数,down_num表示组合输的下数
                while(true)
                {
                System.out.println("请输入组合数上边的数");
                if(scanner.hasNextInt())
                    up_num=scanner.nextInt();
                System.out.println("请输入组合数下边的数");
                if(scanner.hasNextInt())
                    down_num=scanner.nextInt();
                System.out.print(Combination(up_num,down_num));
                }
            }
            public static int Combination(int up,int down)//计算组合数
            {
                int a[][]=new int[down+1][down+1];
                int i,j;
                for(i=0;i<=down;i++)
                a[i][0]=1;
                for(i=1;i<=down;i++)
                    a[i][i]=1;
                for(i=2;i<=down;i++)
                    for(j=1;j<i;j++)
                        a[i][j]=a[i-1][j]+a[i-1][j-1];
                return a[down][up];
            }
    }

     

    (3)使用递归的方法用组合数递推公式

    设计思想

    直接把所给的公式写成函数,并采取递归的方法,函数结束的条件是组合数的上下两个数相等,或者上变数是1

    程序流程图

    import java.util.Scanner;
    
    public class YH_tri {
    
        public static void main(String[] args)
    
        {
    
           Scanner scanner =new Scanner(System.in);
    
           int up_num=1,down_num=1;//up_num表示组合数的上数,down_num表示组合输的下数
    
           while(true)
    
           {
    
           System.out.println("请输入组合数上边的数");
    
           if(scanner.hasNextInt())
    
               up_num=scanner.nextInt();
    
           System.out.println("请输入组合数下边的数");
    
           if(scanner.hasNextInt())
    
               down_num=scanner.nextInt();
    
           System.out.print(Combination(up_num,down_num));
    
           }
    
        }
    
        public static int Combination(int up,int down)//计算组合数
    
        {
    
           int Com;
    
           if(up==1)
    
               return down;
    
           else if(up==down)
    
               return 1;
    
           else
    
               return(Combination(up,down-1)+Combination(up-1,down-1));
    
              
    
        }
    
    }

    运行截图

     

     

    作业2:递归编程解决汉诺塔问题

    程序设计思想

    经分析得移动每个盘子都需移动他的上边的盘子;由此产生递归的条件求组合数

    程序流程图

    程序源码

    import java.util.Scanner;
    public class Hanoi {
    public static void main(String[] args)
    {
        Scanner scanner=new Scanner(System.in);
        int num=1;
        System.out.println("请输入汉诺塔的层数");
        if(scanner.hasNextInt())
        {
            num=scanner.nextInt();
        }
        System.out.println("操作步骤如下(其中A表示起始塔,B表示借助的塔,C表示最终塔)");
        hanoi(num,'A','B','C');
    }
    public static void hanoi(int num,char one,char two,char three)//one表示起始塔,two表示移动过程借助的塔,three表示最终的位置塔
    {
        if(num==1)
        {
            move(one,three);
        }
        else
        {
            hanoi(num-1,one,three,two);
            move(one,three);
            hanoi(num-1,two,one,three);
        }
    }
    public static void move(char from,char to)//from表示移动的初位置,to表示末位置
    {
        System.out.println(from+"->"+to);
    }
    }

    实验截图

    作业3

    设计思想

    先确定字符串的长度,然后即可比较第一个和最后一个字符,然后再去掉原来字符串的首尾字符,在进行比较

    程序流程图

    程序源码

    import java.util.Scanner;
    public class Palindrome {
        public static void main(String[] args)
        {
            String str=" ";
            Scanner input =new Scanner(System.in);
            while(true)
            {
            System.out.println("请输入一段话");
            if(input.hasNext())
                str=input.next();
            if(huiwen(str))
            {
                System.out.print("这段话是回文");
            }
            else
                System.out.print("这段话不是回文");
            }
        }
        public static boolean huiwen(String str)
        {
            int len;
            len=str.length();
            if(len==1||len==0)
                return true;
            else if(str.charAt(0)==str.charAt(len-1))
            {
                
                return huiwen(str.substring(1, len-1));
            }
            else
                return false;
        }
    }
    实验截图
     
  • 相关阅读:
    Attribute在.NET编程中的应用
    Attribute应用权限验证
    Enterprise Library: Configuration Application Block
    App_Themes
    C# DNN 地址
    c++函数参数类型引用、指针、值
    四川新华社 关于IT诗人代腾飞 新书《赢道:成功创业者的28条戒律》新闻报道
    30岁之前创业想成功必看
    大师指点—为人处世秘诀之快乐成功之道!
    四川经济日报 关于代腾飞 新书《赢道:成功创业者的28条戒律》新闻报道
  • 原文地址:https://www.cnblogs.com/wei-jing/p/7664157.html
Copyright © 2011-2022 走看看