7-1.理解java中的递归思想

一.生活中的递归

1.举例

从前有坐山,山上有座庙,庙里有个老和尚给小和尚将故事,讲的就是:
"从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事,讲的就是:
“从前有座山,山上有座庙…”
“从前有座山……”
“…”

2.在编程思想中的应用

自身中又包含了自己,该种思想在数学和编程中非常有用,因为有些时候,我们遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解了。

二.递归的概念

1.定义

一个方法在执行过程中调用自身, 就称为 “递归”.

递归相当于数学上的 “数学归纳法”, 有一个起始条件, 然后有一个递推公式.

2.举例

例如, 我们求 N!
起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束条件.
递归公式: 求 N! , 直接不好求, 可以把问题转换成 N! => N * (N-1)!

3.递归的必要条件

  1. 将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同
  2. 递归出口
  3. 例子 用递归的方法打印出1 2 3

7-1.理解java中的递归思想_第1张图片

4.递归的理解:

  • 递:是一个动作
  • 归:也是一个动作
  • 递的时候:每次只执行代码的一部分,就去执行下一轮次的这个部分(顺序依次)
  • 归的时候:会把当前方法剩余部分执行完毕(逆序依次)

递的次数和归的次数是一样的

代码如下

public class Test{
    public static void main(String[] args) {
        fun(3);
    }
    public static void fun(int a) {
        if (a==1){
            System.out.println(a);
            return;
        }
        fun(a-1);
        System.out.println(a);
    }
}`

5.递归的难点

利用数学思维,找到递归需要的递推公式,起始条件和递推出口。

三.写递归的时候经常遇到的错误

1.报错如下-栈溢出错误

Exception in thread "main" java.lang.StackOverflowError
	at com.it.demo.Test.fun(Test.java:7)
	at com.it.demo.Test.fun(Test.java:7)

2.问题展示以及解决办法

7-1.理解java中的递归思想_第2张图片
从中我们能体会到递归中终止条件的重要性。

你可能感兴趣的:(javase,java,开发语言)