递归在我们写代码中会经常用到,今天我们来讲解一下递归的本质意义。
其实很明显,这个词语就包含了两个意思,一个是“递”,一个是“归”,这两个动词组成了递归的完美实现。
我们通过一个例子来讲一下:斐波那契数列(兔子数列)
这个数列相信大家有所耳闻,斐波那契数列是指这样一个数列:1,1,2,3,5,8,13,21,34,55,89……这个数列从第3项开始 ,每一项都等于前两项之和。
首先我们在代码里面创建一个方法(fib)代表斐波那契额数列。
public static int fib(int n){ if (n == 1||n == 2){ return 1; } return fib(n - 2)+fib(n - 1); }
这就是斐波那契数列的方法,下面我们一步一步来看,怎么样实现了递归:
1,首先int fib(int n)
2,确定起始条件(其实我们说的起始条件,最终就是终止条件,递归就是通过判断是否起始条件=终止条件来中止这一递归的进程)起始条件就是if (n == 1||n == 2) return 1;
3,写出通项公式:fib(n - 2)+fib(n - 1)其实通项公式我们从斐波那契的定义里也能提取出来,就是除前两项外,任何一项都等于前两项之和。
举个例子:假如n=3,进入这个方法,因为n=3,所以进入return fib(n - 2)+fib(n - 1);也就是fib(1)+fib (2)然后这个fib(1)和fib(2)重新再进入方法,那么此时我们发现n=1 , n=2,所以return 1,从而完成了此次方法。那么在这个过程中哪些是“递”,哪些是“归”呢?
当n=3进入fib然后进行return时,其实就是完成了“递”,当重新进入方法然后return 1时就完成了“归”
以上就是对于递归的理解,欢迎大家留言,如有不当之处,欢迎批评指正。