今日JAVA——练习题六

JAVA每日随手练【方法的递归】

1.青蛙跳台阶问题

功能:一只青蛙跳台阶,一次可以跳1阶,可以2阶。那么,台阶为n时,有多少种跳法。
分析:一只青蛙一次可以跳上1级台阶,也可以跳上2级。
求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
如果n=1,只有一种跳法,那就是1
如果n=2,那么有两种跳法,2,[1,1]
如果n=3,那么有三种跳法,[1,1,1],[1,2],[2,1]
如果n=4,那么有五种跳法,[1,1,1,1],[1,1,2],[1,2,1],[2,1,1],[2,2]
如果n=5,那么有八种跳法,[1,1,1,1,1],[1,1,1,2],[1,1,2,1],[1,2,1,1],[2,1,1,1],[2,2,1],[2,1,2],[1,2,2]
结果为1,2,3,5,8(斐波那契数列)
代码:

import java.util.Scanner;

public class test1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入青蛙所需要跳的阶数为:");
        int m = sc.nextInt();
        System.out.println("青蛙跳"+m+"阶的跳法为"+fib(m)+"种");
        sc.close();
    }
    private static int fib(int a) {
        if (a == 1) {
            return 1;
        } else if (a == 2) {
            return 2;
        }else {
            return fib(a - 1) + fib(a - 2);
        }
    }
}

运行结果:
在这里插入图片描述

2.返回的数字之和

功能:写一个递归方法,输入一个非负整数,返回组成它的数字之和
例如,输入1729,则应该返回1+7+2+9==19
代码:

import java.util.Scanner;

public class test2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个非负整数:");
        int m = sc.nextInt();
        System.out.println("返回值为:"+sum(m));
        sc.close();
    }
    public static int sum(int n){
        if (n<10){
            return n;
        }
        return n%10 +sum(n/10);     //1792==递归179+2==(递归17+9)+2==(递归1+7)+9+2==1+7+9+2
    }
}

运行结果:
在这里插入图片描述

3.递归求 N 的阶乘

功能:递归求 N 的阶乘

import java.util.Scanner;

public class test3{
    public static void main(String[] args) {
        System.out.print("输入所求数字:");
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        System.out.println(m+"的阶乘为:"+fac(m));
        sc.close();
    }
    public static int fac(int n){
        System.out.println("函数开始,n=:"+n);
        if (n==1){
            System.out.println("函数结束,n=1,返回值=1");
            return 1;
        }
        int ret = n*fac(n-1);
        System.out.println("函数结束,n=:"+n+"返回值="+ret);
        return ret;
    }
}

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值