• 码农人,码农魂,码农都是人上人【Java】值得收藏的【方法递归】经典题目 (1)


    目录

    1.递归求n的阶乘

    2.递归求和

    3.递归打印一个整数的每一位

    4.递归实现计算一个非负整数的每一位之和

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


    1.递归求n的阶乘

    题目描述:递归求n的阶乘

    难度:⭐

    解题思路:

    1. 1的阶乘就是1
    2. 大于1的情况,num每次减1来逼近1,然后返回阶乘值
    1. public static int fac(int num) {
    2. if (num == 1) {//1的阶乘就是1 - 直接返回1就可以
    3. return 1;
    4. } else {
    5. //大于1的情况
    6. int recur = num * fac(num - 1);
    7. return recur;
    8. }
    9. }
    10. public static void main(String[] args) {
    11. int num = 3;
    12. int ret = fac(num);
    13. System.out.println(ret);
    14. }

    代码结果:

    2.递归求和

    题目描述:递归求 1 + 2 + 3 + ... + 10

    难度:⭐

    解题思路:

    1. 如果值是1,那1本身就是和
    2. 不是的情况,每次减少一个数,拿减少前的加上减少后的
    1. public static int func(int n) {
    2. if (n == 1) {
    3. return 1;
    4. }else {
    5. return n + func(n - 1);
    6. }
    7. }
    8. public static void main(String[] args) {
    9. int num = 10;
    10. int ret = func(num);
    11. System.out.println(ret);
    12. }

    代码结果:

    3.递归打印一个整数的每一位

    题目描述:按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) 

     难度:⭐⭐

    解题思路:

    1. 如果是两位数或以上,先分离成一位数再一个一个打印
    2. 如果不是就直接求余数打印
    1. public static void add(int n) {
    2. if (n > 9) {
    3. add(n / 10);
    4. }
    5. System.out.println(n % 10);
    6. }
    7. public static void main(String[] args) {
    8. int n = 123;
    9. add(n);
    10. }

    代码结果:

    4.递归实现计算一个非负整数的每一位之和

    题目描述:写一个递归方法,输入一个非负整数,返回组成它的数字之和

    难度:⭐⭐

    解题思路:

    1. 如果数值小于9,直接返回数值就可以了
    2. 大于的情况,利用 模10 和 除10 来分离出每一位
    1. public static int sum(int num) {
    2. if (num <= 9) {
    3. return num;
    4. }else {
    5. return num % 10 + sum(num / 10);
    6. }
    7. }
    8. public static void main(String[] args) {
    9. int n = 123;
    10. int ret = sum(n);
    11. System.out.println(ret);
    12. }

    代码结果:

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

    题目描述:斐波那契数列的前两项之和等于第三项。例如:前三个斐波那契数是1 1 2。

    难度:⭐⭐⭐

    解题思路:

    1. 如果是求第一项或者是第二项那就直接返回1,因为前两项都是1
    2. 大于两项的情况,传过来的数值减去2表示前一项的前一项,而减1就是前一项
    1. public static int fib(int n) {
    2. if (n == 1 || n == 2) {
    3. return 1;
    4. }
    5. return fib(n - 1) + fib(n - 2);
    6. }
    7. public static void main6(String[] args) {
    8. System.out.println(fib(1));
    9. System.out.println(fib(2));
    10. System.out.println(fib(3));
    11. System.out.println(fib(4));
    12. System.out.println(fib(5));
    13. System.out.println(fib(6));
    14. }

    代码结果:

  • 相关阅读:
    Java 单例模式——双检锁
    Vue3学习笔记
    MediaPlayer_Analyze-1-framework
    [数字信号处理]应用FFT计算线性卷积
    【如何学习Python自动化测试】—— 时间等待
    使用Python抢购商品
    Revit如何快速做净高分析?方便、快捷的方法来了
    Map集合中,当添加一个键值对元素时,HashMap发生了什么?
    perf 常见使用方法
    Git --- 基础介绍
  • 原文地址:https://blog.csdn.net/m0_63033419/article/details/126112388