夯实Java基础(四)

1、递归求 N 的阶乘

public class RecursiveFactorial {
    public static int factor(int n){
        if(n==1){
            return 1;
        }
        return n*factor(n-1);
    }
    public static void main(String[] args) {
        System.out.println(factor(3));
    }
}

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

public class RecursiveSum {
    /**
     * 递归求 1 + 2 + 3 + ... + 10
     * @param args
     */
    public static int sum(int n){
        if(n==1){
            return 1;
        }
        return n+sum(n-1);
    }
    public static void main(String[] args) {
        System.out.println(sum(10));
    }
}

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

import java.util.Enumeration;

public class RecursivePrint {
    public static void print(int n){
        // n大于9就一直除以10,最后得到最高位
        if (n>9){
            print(n /10);
        }
        // 把除过最后一位之外的数字去掉
        System.out.print(n%10 +" ");
    }
    public static void main(String[] args) {
        print(1234);
    }
}

4、写一个递归方法,输入一个非负整数,返回组成它的数字之和.

public class RecursiveNumComposition {
    /*
        写一个递归方法,输入一个非负整数,返回组成它的数字之和.
     */
    public static int sum(int num){
        if(num<10){
            return num;
        }
        return num%10+sum(num/10);
    }
    public static void main(String[] args) {
        System.out.println(sum(12345));
    }
}

5、递归求斐波那契数列的第 N 项

public class RecursiveFibonacci {
    public static int fibonacci(int n){
        if(n==1||n==2){
            return 1;
        }
        return fibonacci(n-1)+fibonacci(n-2);
    }
    public static void main(String[] args) {
        for (int i = 1; i < 8; i++) {
            System.out.println(fibonacci(i));
        }
    }
}

6、递归求解汉诺塔问题

​ 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。 并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。 问应该如何操作?

public class Hannio {
    public static void move(char a,char b){
        System.out.println("将盘子从"+a+"移动到"+b);
    }
    // 将 a 上的 n个圆盘借助b,移动到c
    public static void hannioTower(int n,char a,char b,char c){
        if(n == 1){
            move(a,c);
        }
        else{
            // 借助c,将n-1个圆盘由a移动到b
            hannioTower(n-1,a,c,b);
            // 将剩余的一个圆盘,由a移动到c
            move(a,c);
            // 将剩下的盘子,借助a,把b柱上的n-1个盘子移动到c
            hannioTower(n-1,b,a,c);
        }
    }
    public static void main(String[] args) {
        char a = 'a';
        char b = 'b';
        char c = 'c';
        hannioTower(3,a,b,c);
    }
}

7、递归实现代码: 青蛙跳台阶问题

一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法

public class FrogJumPingOnStairs {
    /*
        一只青蛙一次可以跳上 1 级台阶,也可以跳上2级。
        求该青蛙跳上一个n级的台阶总共有多少种跳法
     */
    public static int  jumpStairs(int n){
        // 若只有一阶的时候 f(1) = 1 即跳一次
        if(n==1){
            return 1;
        }
        // 若只有两阶的时候 f(2) = 2 即跳两次和跳一次
        if(n==2){
            return 2;
        }
        return jumpStairs(n-1)+jumpStairs(n-2);
    }
    public static void main(String[] args) {
        System.out.println("跳四级台阶有"+jumpStairs(4)+"种方法");
    }
}
发布了65 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44002167/article/details/103776751