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

    一、计算组合数

    1.设计思路:

    ①利用组合数公式计算(计算阶乘用循环)

    ②利用递推方法计算

    ③利用递归方法计算

    2.流程图:

    3.程序代码

    //信1605-3 20163683 蔡金阳
    package lesson2;
    import java.util.Scanner;
    public class Digui {
    
        public static int Zuhe1(int n,int k){
            int x=1,y=1,z=1,c;
            for(int i=n;i>0;i--){
                x=i*x;
            }
            for(int i=k;i>0;i--){
                y=i*y;
            }
            for(int i=n-k;i>0;i--){
                z=i*z;
            }
            c=x/(y*z);
            return c;
        }//公式法求
        public static int Zuhe2(int n,int k){
             int c=1;
             for(int i=k;i<n;i++){
                 c=c*(i+1)/(i-k+1);
             }
             return c;
        }//递推法求
        public static int Zuhe3(int n,int k){
            int i=n;
            if(n==k){
                return 1;
            }
            else{
                return Zuhe3(n-1,k)*n/(n-k);
            }
            
        }//递归法求
    
        public static void main(String args[]) {
        int n,k;
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        k=sc.nextInt();
        System.out.println(Zuhe1(n,k));
        System.out.println(Zuhe2(n,k));
        System.out.println(Zuhe3(n,k));
    }
    }

    4.运行结果

    二、汉诺塔问题

    1.设计思路:

    ①输入汉诺塔层数

    ②利用递归找出方法

    ③利用move函数输出

    2.流程图:

    3.实验代码

    //信1605-3 20163683 蔡金阳
    package lesson2;
    import java.util.Scanner;
    public class Hnt{
        public static void main(String args[]) {
            int n;
            Scanner sc=new Scanner(System.in);
            System.out.println("input the number of diskes:");
            n=sc.nextInt();
            System.out.println("The step to move "+n+" diskes:");
            Hanoi(n,"A","B","C");
        }
        public static void move(String x,String y){
            System.out.println(x+"-->"+y);
        }
        public static void Hanoi(int n,String one,String two,String three){
            if(n==1){
                move(one,three);
            }
            else{
                Hanoi(n-1,one,three,two);
                move(one,three);
                Hanoi(n-1,two,one,three);
            }
        }
    }

    4.运行结果

    三、字符回文数

    1.设计思路:

    ①输入一个字符串

    ②利用递归方法判断是否为字符回文数

    ③输出判断结果

    2.流程图:

    3.实验代码

    //信1605-3 20163683 蔡金阳
    package lesson2;
    import java.util.Scanner;
    import javax.swing.JOptionPane;
    public class Hws {
        public static void main(String[] args)
        {
             String test;
             Scanner sc=new Scanner(System.in);
             System.out.println( "请输入需要判断的字符串:" );
             test=sc.next();
             int i=0;
             int j=test.length()-1;
             String jieguo=" ";
             if(panduan(test,i,j))
             {
                 jieguo=test+"判断是否回文的结果为:是。";
             }
             else
             {
                 jieguo=test+"判断是否回文的结果为:否。";
             }
             System.out.println(jieguo);
        }
        public static boolean panduan(String test,int i,int j)
        {
            if(i>j)
            {
                throw new IllegalArgumentException();
            }
            else if(i==j)
            {
                return true;
            }
            else if(i==j-1)
            {
                return test.charAt(i)==test.charAt(j);
            }
            else
            {
                return ((test.charAt(i)==test.charAt(j))&&panduan(test,i+1,j-1));
            }
        }
    
    }

    4.运行结果

  • 相关阅读:
    克服 iOS HTML5 音频的局限
    oracle__删除重复记录__三种方法及总结(转载百度文库)
    Oracle 字符集
    无法通过网页进入em
    Ubuntu 12.04(32位)安装Oracle 11g(32位)全过程以及几乎所有问题的解决办法
    正则表达式30分钟入门教程
    linux下安装jdk
    QTP相关书籍
    假的数论gcd,真的记忆化搜索(Codeforce 1070- A. Find a Number)
    搜索基础_HDU1312_dfs_递归+stack实现+bfs_queue实现
  • 原文地址:https://www.cnblogs.com/cairsha/p/7662333.html
Copyright © 2011-2022 走看看