***什么是递归? ***
从前有座山,山上有座庙,庙里有个老和尚和一个小和尚,有一天,老和尚对小和尚说:从前有座山,山上有座庙,庙里有个老和尚和一个小和尚,有一天,老和尚对小和尚说:从前有座山,山上有座庙,庙里有个老和尚和一个小和尚,有一天,老和尚对小和尚说…(以此循环)
应该很多人都听过这个吧!其实这也算是递归的思想吧。不断调用“从前有座山,山上有座庙,庙里有个老和尚和一个小和尚,有一天,老和尚对小和尚说”只不过没有结束条件,但递归有结束条件吧了。通过上面这个故事,相信也对递归有了一点点的了解吧。接下来我们就来说说对递归的定义吧。
递归的定义
递归算法是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。
在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知。
懂了吗?这是书上对其的一种定义,我的理解就是函数本身不断的调用自己,直到达到结束的条件(该理解的仅是个人的理解,如有啥不对可以指出哦)。
构成递归需具备的条件
- 子问题须与原始问题为同样的事,且更为简单;
简单来说就是像数学里的公式,改变的仅仅是数值吧。
(该理解的仅是个人的理解,如有啥不对可以指出哦)。 - 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
简单来说就是你每天做着循环的事,总不可能一直做下去吧,总要停下来休息休息出去走走吧。递归也是一样的,不可能一直循环,总要停下来,不然就死循环了!
(该理解的仅是个人的理解,如有啥不对可以指出哦)。
递归的执行,如上图所示,进来之后判断是否为结束条件,如果是则进入出口,如果不是则进入循环体,然后再次调用本身,就这样循环着,直到结束条件为真,跳出函数。
简单例题:
题目要求:编写程序在控制台输出斐波那契数列第20项
输入20,输出6765
斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …
这个数列从第三项开始,每一项都等于前两项之和。
即:f[n]=f[n-1]+f[n-2];(n>2)
代码如下:
public class FiB {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(fib(20