课程作业01
1、 使用组合数公式利用n!来计算
(1) 设计思想
运用递归阶乘的函数,依次求出n!、k!、(n-k)!,再根据组合数的公式计算(n!/(k!*(n-k)!)).
(2) 流程图
(3)源代码
package zuoye1;
import java.util.Scanner;
public class zuhe
{
public static void main(String[] args)
{
System.out.println("请输入n:");
@SuppressWarnings("resource")
Scanner scanner=new Scanner(System.in);
int zuhe1=scanner.nextInt();
System.out.println("请输入k:");
int zuhe2=scanner.nextInt();
int zuhe3=calculateN(zuhe1-zuhe2);
int zuhe4=calculateN(zuhe1)/(calculateN(zuhe2)*zuhe3);
System.out.println("组合数为:"+zuhe4);
}
public static int calculateN(int n)//递归阶乘算法函数
{
if(n==1 || n==0)
{
return 1;
}
return n*calculateN(n-1);
}
}
(4)结果截图
2、使用递推的方法用杨辉三角形计算
(1)设计思想
利用JAVA中的BigInteger方法可以准确的求一个数的阶乘,利用递归的方法就是利用杨辉三角的原理,一个数等于它的左上角和右上角的两个数的和,通过递归调用方法本身求出结果,通过不断的递归调用就能求出最终的结果。
(2)流程图
(3)源代码
package zuoye1;
import java.math.BigInteger;
import java.util.Scanner;
public class yanghui
{
int n;
int k;
void yanghui(intnumber1,intnumber2)
{
n=number1;
k=number2;
}
public void get()
{
System.out.println(calculation21(n+1,k+1));
}
private char[] calculation21(int i, int j)
{
return null;
}
public int calculation2(int n,int k)
{
if(k==1||k==n)
return 1;
if(n==0||n==1)
return 1;
return k;
}
public static void main(String[] args)
{
Scanner Input=new Scanner(System.in);
System.out.print("输入n的值:");
int number1=Input.nextInt();
System.out.print("输入k的值:");
int number2=Input.nextInt();
while(number2<0||number2>number1)
{
System.out.print("请输入一个≥0并且≤n的数:");
number2=Input.nextInt();
}
yanghui A=new yanghui();
System.out.print("使用递推的方法用杨辉三角形计算的结果:");
A.get();
}
}
3、使用递归的方法用组合数递推公式计算
(1)设计思想
设计思想:首先定义组合数中的两个数,调用方法,并且在方法中在调用自己,完成递归,最后输出正确的结果。package 使用递归的方法用组合数递推公式计算;
(2)流程图
3)源代码
package zuoye1;
public class digui
{
public static void main(String[] args)
{
int a=4;
int b=5;
System.out.println("C("+a+","+b+")="+gNum(a,b));
}
public static int gNum(int m,int n)
{
if(m==0||m==n)
return 1;
else return gNum(m-1,n-1)+gNum(m,n-1);
}
}
(4)结果截图
课程作业02
递归编程解决汉诺塔问题。用Java实现
(1)设计思想
设置abc三个字符型变量用来表示三个塔,定义一个move函数,用来存储汉诺塔解决的方法,当m(环的个数)=1时,直接将盘子从a移动到c即可,如果盘子个数超过2,就用递归的思想解决。
(2)流程图
(3)源代码
package zuoye2;
import javax.swing.JOptionPane;
public class hannuota
{
public static void main(String args[])
{
String s=" ";
s=JOptionPane.showInputDialog("请输入环的个数");
int j=0;
char a='a',b='b',c='c';
j=Integer.parseInt(s);
move(j,a,b,c);
}
public static void move(int m,char a,char b,char c)
{
if(m==1)
{
System.out.println(a+"->"+c);
}
else
{
move(m-1,a,c,b);
System.out.println(a+"->"+c);
move(m-1,b,a,c);
}
}
}
(4)结果截图
课程作业03
使用递归方式判断某个字串是否是回文( palindrome )
“回文”是指正着读、反着读都一样的句子。比如“我是谁是我”
使用递归算法检测回文的算法描述如下:
A single or zero-character string is a palindrome.
Any other string is a palindrome if the first and last characters are the same, and the string that remains, excepting those characters, is a palindrome.
(1)设计思想
定义main函数,定义两个整型变量i,j用来表示字符串的位置下标。再定义一个布尔类型的函数judge用来判断字符串是否为回文字符串。如果字符串长度为1,直接返回true,如果字符串长度大于1,则递归判断。每次判断结束后,i+1,j-1,直到判断结束。
(2)流程图
3)源代码
package zuoye3;
import java.util.Scanner;
public class panduan
{
public static void main(String[] args)
{
String str=" ";
System.out.println("请输入要判断的字符串(true表示回文字串,false表示非回文字串)");
Scanner input=new Scanner(System.in);
str=input.next();
int i=0;
int j=str.length()-1;
System.out.println(panduan.judge(str,i,j));
}
public static boolean judge(String s,int i,int j)
{
if(i>j)
throw new IllegalArgumentException();
if(i==j)
return true;
else
{
return(s.charAt(i)==s.charAt(j)) && judge(s,i+1,j-1);
}
}
}
(4)结果截图