杨辉三递归java程序_java 作业03方法

本文介绍了如何使用Java编写程序来生成随机整数和计算组合数,采用杨辉三角的递归算法。首先展示了一个生成指定数量随机数的程序,然后详细解释了递归计算组合数的两种方法:直接递归调用和利用杨辉三角公式。此外,还涉及了汉诺塔问题的递归解决方案和回文数的判断方法。
摘要由CSDN通过智能技术生成

思考问题1

编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数。

一 思路

1 定义主方法。

2 定义数组存放随机数。

3 确定种子。

4 用随机数公式生成随机数。

5 输出随机数。

二 程序流程图

2fc7fe44d10a006673543566f02a280d.png

88c509c32da4cbc1dba567519c3d0169.png

三 源代码

public class random1000 {

public static void main(String[] args){   //主函数

int[] a=new int[7];                     //定义数组存放随机数

//Random ran= new Random( System.currentTimeMillis() );

a[0]=2;                                  //种子

System.out.println("生成的五个随机数是:");

for(int i=1;i<=5;i++){

a[i]=(7*a[i-1]+7)%1000;      //用随机数公式生成随机数

System.out.println(a[i]);    //输出

}

}

}

四 程序结果截图

8a7c34fa8dc8c9591f35ecb667716a36.png

663fdad5b7313855faf6275f5f776d3b.png

021144d6aaf10d54e27756e1e6870f2a.png

思考问题2

JDK中System.out.println()方法

Print方法有很多重载的方法。当不传值时会调用println()空参数方法,这个方法里面做了换行操作,这个方法它是有打印数据的,只不过这个是一个换行符。

思考问题3

请看以下代码,你发现什么特殊之处了吗?

square()方法中方法名一样,参数类型不一样。

函数重载体现在(1)方法名相同;(2)参数的个数不同,参数类型不同,参数类型的顺序不同。

程序题

一 计算组合数

使用计算机计算组合数有三种方法:

(1)使用组合数公式利用n!来计算

93ca7a189807c5ed251fd27d32382b50.png

(2)使用递推的方法用杨辉三角形计算

4dd8b3e9ad1a3987b8fde4d933d902f6.png

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

1 用递归的方法用组合数递推公式计算

思路

1)定义主方法

2)输入组合数。

3)调用方法求组合数

4)定义求组合数的方法。

5)方法结束的条件。

6)用杨辉三角递归调用自己。

7)输出结果

流程图

14611a4e2d4ff6039c7207f7ca9b7bb2.png

源代码

import java.util.Scanner;

public class yanghui3 {

public static void main(String args[]){    //定义主方法

System.out.println("please input a zuheshu"); //输入组合数

Scanner in=new Scanner(System.in);

int n=in.nextInt();

int k=in.nextInt();

if (n < k || n <= 0 || k <= 0) {

System.out.println("n,k数据输入不合理");

return;

}

System.out.println(digui(n,k));                //调用方法求组合数

}

public static int digui(int n,int k)           //定义求组合数方法

{

if(k==0||k==n)                            //方法结束条件

return 1;

else

return digui(n-1,k)+digui(n-1,k-1);  //杨辉三角计算组合数递归调用

}

}

程序结果截图

2用组合数公式计算

思路

1)定义主方法

2)输入组合数。

3)调用方法求组合数

4)定义求组合数的方法。

5)方法结束的条件。

6)用杨辉三角递归调用自己。

7)输出结果

流程图

19972adc5bb5ad6ca35686320b9dcd5d.png

源代码

import java.io.*;

public class yanghui {

public static void main(String args[]) throws IOException //定义主方法

{

int n,k,a;

System.out.println("Please input n,k:");        //输入

BufferedReader read=new BufferedReader(new InputStreamReader(System.in));                        //读入字符串

String aa=read.readLine();

String bb=read.readLine();

n=Integer.parseInt(aa);                        //类型转换为整型

k=Integer.parseInt(bb);

if (n < k || n <= 0 || k <= 0) {

System.out.println("n,k数据输入不合理");

return;

}

a=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));

System.out.println("组合数的值是:"+a);     //输出

}

public static int jiecheng(int n){             //定义求阶乘的方法

if(n==1||n==0)

return 1;

else

return n*jiecheng(n-1);                 //递归调用

}

}

程序截图

5e4bbd09ce295150683271d9f13855e9.png

de8f49af18a749ca287bf669bd71230c.png

4a27d74300a0151b7a703afdecf45393.png

二 汉诺塔题

递归编程汉诺塔问题,用程序实现

1 思路

1)        定义主方法

2)        输入盘子个数

3)        调用玩游戏的方法

4)        定义移动一个盘子的方法

5)        定义玩游戏的方法

2流程图

03358e30fda60e0abe4c31bdf8faa6af.png

3源代码

import java.util.Scanner;

public class hannuota {

static int i=0;

public static void main(String[] args) {        //定义主方法

// TODO Auto-generated method stub

int n;

System.out.println("Please input n:");  //输入盘子个数

Scanner in=new Scanner(System.in);

n=in.nextInt();

han(n,'a','b','c');               //调用玩游戏的方法

}

public static void move(char a,int n,char c){     //定义移动一个盘子的方法

i++;

System.out.println("第"+i+"步,"+"将第"+n+"个盘子从"+a+"移到"+c);

}

public static void han(int n,char a,char b,char c){ //定义玩游戏的方法

if(n==1)                   //盘子是一个的时候把第一个盘子从a移到c;

move(a,1,c);

else

{

han(n-1,a,c,b);    //将a上1-n-1的移到b,c过渡

move(a,n,c);       //将编号为n的从a移到c

han(n-1,b,a,c);    //将b上1-n-1的移到a,c过渡

}

}

}

4 程序截图

0356d6bd7d923ea09409f8226ccc4bab.png

421fca18bc19904cd33bfce17092d5ee.png

5ee16090803812c4e30dcd6b4a4af3ca.png

三 回文数

1 思路

6)        定义主方法

7)        输入字符串

8)        调用玩游戏的方法

9)        定义移动一个盘子的方法

10)    定义玩游戏的方法

2流程图

0066964996cbc2f747d6b62258a84579.png

3源代码

import java.util.Scanner;

public class huiwenshu {

public static void main(String[] args) {              //定义主方法

// TODO Auto-generated method stub

String str="";

System.out.println("Please input a string:");   //输入字符串

Scanner in=new Scanner(System.in);

str=in.nextLine();

int len=str.length();                            //求字符串长度

System.out.println("true is palindrome,false is not:"+pan(str,len-1,0,len)); }

public static boolean pan(String str,int h,int z,int len){ //定义判断是否是回文数的方法

if(len==0||len==1)       //函数结束条件

return true;

if(str.charAt(h)!=str.charAt(z))  //对应的不相等就不是回文数

return false;

return  pan(str,h-1,z+1,len-2);  //递归调用

}

}

4 程序结果截图

985efa152591956d941cf0904dbfd2d6.png

873df85d05b87f0abe737f2c289c922c.png

74d509918502faca74e367369f1f040c.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值