方法的递归相关练习(Java 实现)

1、递归求 N 的阶乘

import java.util.Scanner;

public class Test {
    //递归求 N 的阶乘
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入N");
        int N = scanner.nextInt();
        System.out.println(mul(N));
    }

    private  static int mul(int N) {
        if (N == 1) {
            return 1;
        }
        return N * mul(N - 1);
    }
}

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

public class Test {
    public static void main(String[] args) {
        //递归求 1 + 2 + 3 + ... + 10
        System.out.println(sum(10));
    }

    private static int sum(int n) {
        if (n == 1) {
            return 1;
        }
        return n + sum(n - 1);
    }
}

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

import java.util.Scanner;

public class Test {
    //按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入n");
        int n = scanner.nextInt();
        print(n);
    }

    private static void print(int n) {
        if (n > 9) {
            print(n / 10);
        }
        System.out.print(n % 10 + " ");
    }
}

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

public class Test {
    //写一个递归方法,输入一个非负整数,返回组成它的数字之和.
    public static void main(String[] args) {
        System.out.println(sum(1234));
    }

    private static int sum(int num) {
        if (num < 10) {
            return num;
        }
        return num % 10 + sum(num / 10);
    }
}

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

import java.util.Scanner;

public class Test {
    //求斐波那契数列的第n项
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入n");
        int n = scanner.nextInt();
        System.out.println(sum(n));
    }

    public static int sum(int n) {
        if (n == 1 || n == 2) {
            return 1;
        } else {
            return sum(n - 2) + sum(n - 1);
        }
    }
}

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


public class Test {
    //递归求解汉诺塔问题
    public static void main(String[] args) {
        hanoiTower(3,"x","y","z");
    }

    private static void hanoiTower(int n, String x, String y, String z) {
        if (n == 1) {
            System.out.println(x + "-->" + z);
        } else {
            hanoiTower(n - 1, x, z, y);
            System.out.println(x + "-->" + z);
            hanoiTower(n - 1, y, x, z);
        }

    }
}

7、递归实现代码: 青蛙跳台阶问题
一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法

import java.util.Scanner;
//递归实现代码: 青蛙跳台阶问题
public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入台阶数n");
        int n = scanner.nextInt();
        System.out.println(jumpFloor(n));
    }

    private static int jumpFloor(int num) {
        //1.有一个或者两个台阶
        if (num == 1 ||num == 2) {
            return num;
        }  //2.有n个台阶,有 n - 1 + n - 2 种跳法
            //当青蛙第一次跳一个台阶时,剩下 n - 1 个台阶有 n - 1 种跳法
            //当青蛙第一次跳两个台阶时,剩下 n - 2 个台阶有 n - 2 种跳法
         else {
            return jumpFloor(num - 1) + jumpFloor(num - 2);
        }
    }

}

发布了39 篇原创文章 · 获赞 7 · 访问量 337
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览