课后作业杨辉三角形与组合数公式、递归编程解决汉诺塔问题。用Java实现、使用递归方式判断某个字串是否是回文

一、杨辉三角形与组合数公式

1.使用组合数公式n!来实现

(1)利用组合数公式计算,通过对n的阶乘进行递归,实现求n!。

(2)程序流程图

                    

                

                     

              

(3)源程序代码

import java.util.Scanner;

public class Yhunsanjiao
{

public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个数作为n:");
int n=sc.nextInt();
System.out.print("请输入一个数作为k:");
int k=sc.nextInt();
System.out.print("在n个元素中选取k个组合的所有结果数:"+zuheshu(k,n));
}
public static long zuheshu(int k,int n){
long i;
i=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));
return i;
}
public static long jiecheng(int i){
long j=1;
if(i!=1)
j=i*jiecheng(i-1);
else
i=1;
return j;
}
}

(4)程序截图

 

2.使用递推方法用杨辉三角形计算组合数

(1)解题思想:

杨辉三角可以反映组合数的值,例如杨辉三角中第六排三列为10,即对应组合数c(5,2);通过递归建立杨辉三角,

再通过杨辉三角输出组合数值。

(2)程序流程图

                    

             

                       

                   

(3)源程序代码

import java.util.Scanner;

public class YHSJ {

public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个数作为n:");
int n=sc.nextInt();
System.out.print("请输入一个数作为k:");
int k=sc.nextInt();
System.out.print("在n个元素中选取k个组合的所有结果数:"+ditui(k,n));
}

public static int ditui(int n,int m)
{
int a[][]=new int[m+1][m+1];
for(int i=0;i<m+1;i++)
{
for(int j=i+1;j<m+1;j++)
{
a[i][j]=0;
}
for(int j=0;j<=i;j++)
{
if(j==0){ a[i][j]=1;}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
}
return a[m][n];
}
}

(4)截图

3.使用递归的方法用组合数递推公式计算

(1)解题思想:通过对组合数递推公式的递归实现,输出组合数的值

(2)程序流程图:

(3)源程序代码

import java.util.Scanner;

public class YH {

public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个数作为n:");
int n=sc.nextInt();
System.out.print("请输入一个数作为k:");
int k=sc.nextInt();
System.out.print("在n个元素中选取k个组合的所有结果数:"+digui(k,n));
}
public static int digui(int n,int m)
{
if(n>m||n<0||m<0){return 0;}
if(n==1){return m;}
if(n==m){return 1;}
return digui(n-1,m-1)+digui(n,m-1);
}

}

(4)截图

二、递归编程解决汉诺塔问题,用Java实现

1.解决思想:

无论有多少个盘子,始终都有n个盘子从peg1移动到peg3,有n-1个盘子从peg3移动到peg2,也有n-1个盘子从peg1到peg2,

由此进行递归运算,解决问题。

2.程序流程图:

 

(3)源程序代码

import java.util.Scanner;
public class HANNUOTA
{
public static void moveDish(int level, char from, char inter, char to)
{
if (level == 1) {
System.out.println("从" + from + " 移动盘子" + level + " 号到" + to);
} else {
moveDish(level - 1, from, to, inter);
System.out.println("从" + from + " 移动盘子" + level + " 号到" + to);
moveDish(level - 1, inter, from, to);
}
}
public static void main(String[] args)
{
System.out.print("请输入盘子个数:");
Scanner sc = new Scanner(System.in);
int nDisks=sc.nextInt();
moveDish(nDisks, 'A', 'B', 'C');
}
}

(4)实验截图

三、使用递归方式判断某个字串是否是回文

1.解题思路:先从键盘输入一个字符串,再利用String.charAT()函数得到字符串的各个位上的字符,进行比较,判断是否是回文字符串。

2.程序流程图:

(3)源程序代码:

import java.util.*;
public class HWZF
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
String str = null;
System.out.println("请输入您想输入的字符串:");
str = s.next();
System.out.println("您输入的是:");
System.out.println(str);
System.out.println("Is "+str+" a Palindrome?"+isPalindrome(str));

}
public static boolean isPalindrome(String s){
if(s.length()<=1){
return true;
}else if(s.charAt(0) != s.charAt(s.length()-1)){
return false;
}
return isPalindrome(s.substring(1,s.length()-1));
}

}

(4)结果截图:

    

原文地址:https://www.cnblogs.com/2016excellent-3584/p/7664300.html