递归方法的应用
一、计算组合数
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.运行结果