当一个函数用它自己来定义时就称为是递归(recursive)的。Java允许函数是递归的。
递归过程的执行总是一个过程体未执行完,就带着本次执行的结果又进入另一轮过程体的执行。。。如此反复,不断深入,直到某次过程的执行遇到终止递归调用的条件成立时,则不在深入,而执行本次的过程体余下的部分,然后又返货到上一次代用的过程体中,执行余下的部分。。。如此重复,直到回到起始位置上,才最终结束整个递归过程,得到相应的结果。
逐步深入,逐步返回
Tips:对于数值计算使用递归通常不是一个好主意
一般首先考虑的是一个能完成任务的解决方案,其次考虑的是解决方案的效率
递归的基本准则
- 基准情况(base case):保修总要有某些基准的情形,它们不用递归就能求解。
- 不断推进(making progress):对于那些要递归求解的情形,递归调用必须总能
够朝着一个基准情形推进。 - 设计法则 (design rule):假设所以的递归调用都能运行。
合成效益法则(compound interest rule):在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作。
递归的例子
函数f(0)=0且f(x)=2f(x-1)+x*x