资讯详情

Java递归

欢迎阅读子豪博客(

有什么宝贵的意见或建议可以在留言区留言

欢迎

码云仓库:补王子 (YZH_skr) - Gitee.com

生活中的递归

递归应满足以下条件

1.在方法内部,在执行过程中调用自己,每次执行到一部分时执行另一部分

2.递归出口应具有接近终止的条件(归的起始条件)

递归 = 递 归

代码示例: 递归求 N 的阶乘

代码示例求斐波那契数列第 N 项

当我们求 fib(40) 当时发现, 程序执行速度非常慢. 原因是进行了大量的重复操作

斐波那契数列问题可以循环, 避免冗余操作.


生活中的递归

过去,山上有座庙,庙里有个老和尚给小和尚讲故事: "以前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事,讲的是: "从前有座山,山上有座庙..." "从前有座山……"

递归应满足以下条件

1.在方法内部,在执行过程中调用自己,每次执行到一部分时执行另一部分

2.递归出口应具有接近终止的条件(归的起始条件)

递归相当于数学 "数学归纳法", 有起始条件, 然后是递推公式

递归 = 递 归

代码示例: 递归求 N 的阶乘

public static oid main(String[] args) {
int n = 5;
int ret = factor(n);
System.out.println("ret = " + ret);
}
public static int factor(int n) {
if (n == 1) {
return 1;
}
return n * factor(n - 1); // factor 调用函数自身
}
// 执行结果
ret = 120

代码示例 求斐波那契数列的第 N 项

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

当我们求 fib(40) 的时候发现, 程序执行速度极慢. 原因是进行了大量的重复运算

class Test {
    public static int count = 0;
    public static void main(String[] args) {
        System.out.println(fib(40));
        System.out.println(count);
    }
    public static int fib(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }
        if (n == 3) {
            count++;
        }
        return fib(n - 1) + fib(n - 2);
    }
}
// 执行结果
102334155
39088169 // fib(3) 重复执行了 3 千万次

可以使用循环的方式来求斐波那契数列问题, 避免出现冗余运算.

class Test {
    public static int count = 0;
    public static void main(String[] args) {
        System.out.println(fib(40));
        System.out.println(count);
    }
    public static int fib(int n) {
        int last2 = 1;
        int last1 = 1;
        int cur = 0;
        for (int i = 3; i <= n; i++) {
            cur = last1 + last2;
            last2 = last1;
            last1 = cur;
        }
        return cur;
    }
}

标签: skr内置弹簧自复位位移传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台