每日作业20200617 - 递归( 阶乘、斐波那契数列)

题目

要求今日作业使用递归完成

标准作业:
    阶乘
    输入: 整数n (2< n < 13)
    输出: n!

    样例输入: 12
    样例输出: 479001600
-----------------------------------------------------------------
进阶作业:
	斐波那契数列 - 爬楼梯, 每次可以走一阶或者两阶
    这样
        1阶有 112阶有 11,     2                                                       23阶有 111,    12,     21                                              34阶有 1111,   112     121     211    22                               55阶有 11111,  1112,   1121    1211    2111    122     212     221     8种

    输入: 楼梯的阶数(1 < n < 50)
    输出: 一共有多少种爬楼梯方式
    样例输入: 5
    样例输出: 8

分析

1.标准作业:阶乘
2.进阶作业:斐波那契数列

代码

public class Homework0617 {
    public static void main(String[] args) {
        print();
    }

    /**
     * 打印
     */
    public static void print() {
        Scanner sc = null;
        int num = 0;
        while (true){
            System.out.println("\n************************************************************");
            System.out.println("1、标准作业\t\t2、进阶作业\t\t3、退出");
            System.out.print("请输入对应编号,查看对应答案: ");
            sc = new Scanner(System.in);
            num = sc.nextInt(); //接收用户输入

            if (num == 1){
                System.out.println("\n******************标准作业******************");
                basics();   //调用方法
            }else if (num == 2){
                System.out.println("\n******************进阶作业******************");
                advanced(); //调用方法
            }else if (num == 3){
                System.out.println("\n******************系统退出******************");
                break;
            }
            else{
                System.out.println("输入错误,请重新输入");
            }
        }
    }

//**********************************************************************************************************************************
    /**
     * 方法--进阶作业
     */
    public static void advanced() {
        int num = input();              //调用输入方法,得到合法的数字
        int result = series(num);       //调用阶乘方法,得到计算结果
        System.out.println( num + " 的斐波那契数列= " + result);   //输出结果
        /*是否继续计算*/
        if( judge() == true ){
            advanced();
        }
    }

    /**
     * 斐波那契数列
     * @param num
     * @return
     */
    public static int series(int num) {
        if (num == 1 || num == 2){
            return num;
        }
        num = series( num - 1 ) + series(num - 2);
        return num;
    }

//**********************************************************************************************************************************
    /**
     * 方法--标准作业
     */
    public static void basics() {
        int num = input();              //调用输入方法,得到合法的数字
        int result = factorial(num);    //调用阶乘方法,得到计算结果
        System.out.println( num + "! = " + result);   //输出结果
        /*是否继续计算*/
        if( judge() == true ){
            basics();
        }
    }

    /**
     * 阶乘
     * @param num   用户输入的数字
     * @return  返回结果
     */
    public static int factorial(int num) {
        if (num == 1){  //递归结束条件
            return num;
        }
        num *= factorial(num - 1);  //阶乘
        return num;
    }
//**********************************************************************************************************************************

    /**
     * 是否继续计算
     */
    public static boolean judge() {
        System.out.print("\n是否继续?输入y继续计算,其他则退出: ");
        Scanner sc = new Scanner(System.in);
        if ("y".equalsIgnoreCase(sc.next())){
            System.out.print("继续判断,");
            return true;
        }else{
            System.out.println("退出计算!");
            return false;
        }
    }

    /**
     * 输入方法
     * @return 合法的数字
     */
    public static int input() {
        System.out.print("请输入数字: ");
        Scanner sc = null;
        int num = 0;    //存放数字
        boolean flag = false;   //判断是否有输入下一个数字
        while(true){
            sc = new Scanner(System.in);
            flag = sc.hasNextInt();
            if (flag){      //输入的是整数
                num = sc.nextInt();    //存放输入的数字
                if (num > 0){
                    return num;     //如果是正整数,则return
                }else{
                    System.out.print("输入错误,请输入一个正数: ");
                }
            }else{
                System.out.print("输入错误,请输入一个整数: ");
            }
        }
    }

}

运行结果

************************************************************
1、标准作业		2、进阶作业		3、退出
请输入对应编号,查看对应答案: 1

******************标准作业******************
请输入数字: 12
12! = 479001600

是否继续?输入y继续计算,其他则退出: n
退出计算!

************************************************************
1、标准作业		2、进阶作业		3、退出
请输入对应编号,查看对应答案: 2

******************进阶作业******************
请输入数字: 5
5 的斐波那契数列= 8

是否继续?输入y继续计算,其他则退出: n
退出计算!

************************************************************
1、标准作业		2、进阶作业		3、退出
请输入对应编号,查看对应答案: 3

******************系统退出******************

备注

若要列举出所有走法,可参考
[1] (https://blog.csdn.net/u010633678/article/details/84429492)

[2] (https://blog.csdn.net/creazyapple/article/details/8007820)

你可能感兴趣的:(每日作业)