递归方法的应用

一、计算组合数

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.运行结果

 

posted @ 2017-10-14 00:11  蔡二傻  阅读(1733)  评论(0编辑  收藏  举报