首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >JavaSE方法和递归练习题

JavaSE方法和递归练习题

作者头像
趙卋傑
发布2026-01-12 15:27:31
发布2026-01-12 15:27:31
770
举报

方法练习题

1.求和的重载

在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。 并执行代码,求出结果

代码语言:javascript
复制
public static int sum(int a,int b) {
    return a+b;
}

public static double sum(double a,double b,double c) {
    return a+b+c;
}

 2.求最大值方法的重载

在同一个类中定义多个方法:要求不仅可以求2个整数的最大值,还可以求3个小数的最大值?

代码语言:javascript
复制
public static int max(int a,int b) {
    return Math.max(a,b);
}

public static double max(double a,double b,double c) {

    double m = Math.max(a,b);
    return Math.max(m,c);
}

递归练习题

1.按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)

思路: 

完整的操作过程:

代码实现:

代码语言:javascript
复制
public static void print(int n){
        if(n>9){
            print(n/10);
        }
        System.out.print(n%10+" ");
    }

    public  static void main(String[] args){
        int a = 1234;
         print(a);
    }

2.递归求 1 + 2 + 3 + … + 10

思路:

终止条件:在这个问题中,我们选择n == 1作为终止条件,因为当n为1时,1到n的和就是1本身

递归实现1-10相加的操作,我们要把这个问题拆分成一个个相同操作的子问题

子问题:1+2   1+2+3   1+2+3+4 ......这是归的操作

当我们把10递进去的时候要一步一步得到1 2 3 4...,通过相加操作让它们关联起来

代码实现:

代码语言:javascript
复制
 public  static  int sumption(int n){
        if(n==1){
            return 1;
        }
        return n+sumption(n-1);
    }

    public static void main(String[] args) {
        int n = 10;
        int ret = sumption(n);
        System.out.println(ret);
    }

3.递归求 N 的阶乘

思路:

5!= 5*4*3*2*1

拆分成相同的子问题,1*2   1*2*3  1*2*3*4....当进行归操作时要完成这些操作

我们求n的阶乘把n递进去,一步一步找到最小的1,然后进行归的操作,并通过*操作符关联起来

代码实现:

代码语言:javascript
复制
import java.util.Scanner;

 public static int fac(int n){
        if(n==1){
            return 1;
        }
        return n*fac(n-1);

    }

    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int ret = fac(N);
        System.out.println(ret);

    }

4.求斐波那契数列的第 N 项

代码语言:javascript
复制
import java.util.Scanner;

    public static int fibonaci(int n){
        if(n==1){
            return 0;
        }else if(n==2){
            return 1 ;
        }

        return fibonaci(n-1)+fibonaci(n-2);

    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int fib =  fibonaci(n);
        System.out.println(fib);
    }

5.使用递归求解汉诺塔问题

1.游戏的目标

把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

2. 汉诺塔游戏规则

 有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:

(1)每次只能移动一个圆盘; (2)大盘不能叠在小盘上面。

3. 汉诺塔算法分析 

算法分析:n为圆盘的数量,A,B,C为所给的柱子 当n=1,只需把盘子移动a–>c即可

代码语言:javascript
复制
move(A,C);

当n>1时, 第一次移动,要把A柱子上的前n-1个移动到B柱子上;

代码语言:javascript
复制
hanoi(n-1,A,C,B);

第二次移动,直接把A柱子上的最后一个移动到C柱子上;

代码语言:javascript
复制
move(A,C);

第三次移动,把B柱子上的n-1个柱子通过柱子A移动到柱子C上。(图3)

代码语言:javascript
复制
hanoi(n-1,B,A,C);
在这里插入图片描述
在这里插入图片描述

综上:

4.代码实现
代码语言:javascript
复制
   public static void move(char n1,char n2){
        System.out.println(n1+"->"+n2);
    }

    public static void hannoi(int n,char pos1,char pos2,char pos3){
        if(n==1){
            move(pos1,pos3);
        }else{
            hannoi(n-1,pos1,pos3,pos2);
            move(pos1,pos3);
            hannoi(n-1,pos2,pos1,pos3);
        }

    }

    public static void main(String[] args){
       int n = 3;
        char a='A';
        char b='B';
        char c='C';
        hannoi(n,a,b,c);


    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法练习题
    • 1.求和的重载
    •  2.求最大值方法的重载
  • 递归练习题
    • 1.按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
    • 2.递归求 1 + 2 + 3 + … + 10
    • 3.递归求 N 的阶乘
    • 4.求斐波那契数列的第 N 项
    • 5.使用递归求解汉诺塔问题
      • 1.游戏的目标
      • 2. 汉诺塔游戏规则
      • 3. 汉诺塔算法分析 
      • 4.代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档