递归算法
引言: 你想买部新手机,于是你去问老爸要钱,老爸说:“找你老妈要去!”,然后你听了老爸的话,找到老妈,老妈说:“想要钱问你老爸要!”,于是你又听了老妈的话,结果你又去找老爸,无奈老爸的回答还和刚才一样,你又去找老妈,老妈的回答也还是刚才那样,然后。。。你就进入递归了!
基础知识
基本概念: 递归是指一个函数自己调用自己。利用数学表达式可表达为:f(x)= f(x-1)+1
递归算法一般要经历两个过程: 递推(归)和回溯。如下图。
递归算法的基本设计法则:
1、基准情形:必须要有某个基准情形,它无需递归就能解出。
2、不断推进:对于需要求解的情形,每次递归调用都必须要使状况朝向一种基本情况推进。
3、设计法则:假设所有的递归调用都能运行。
4、合成效益发展:在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作(例如使用递归计算斐波那契数列)。
常见的经典递归算法
利用递归求阶乘
代码:
/*
* 递归求阶乘
*/
public class Test{
public static void main(String[] args) {
System.out.println( jie(5) );
}
public static long jie( long val ) {
long a = 1;
if(val == 1 ) {
a=