当一个函数用它自己来定义的时候就称为是递归的。--《数据结构与算法分析java语言描述》
例如:我们可以在非负整数集上定义一个函数f,满足f(0)=0且f(x)=2f(x-1)+x*x。可以得到f(1)=1,f(2)=6,f(3)=21。
public int f(int x){
if(x == 0){
return 0;
}else{
return 2 * f(x-1) + x * x;
}
}
基本法则
1.基准情况:必须要有某些基准的情形,不用递归就能求解。
2.不断推进:对于那些要递归求解的情形,递归调用必须总能朝着一个基准情形推进。
- 当x=0时可以算出而不用递归。和数学公式f(x)=2f(x-1)+xx一样,若没有f(0)=0这个事实在,这个公式就没有意义。Java的递归若没有基准情况*也是毫无意义。上述代码,当x=0时返回0,就是基准情况。
- f(4)需要执行f(3),因此要执行f(2),又要另外执行f(1),因此,2*f(0)+1得到f(1)=1。此时f(0)必须被赋值。由于属于基准情况,我们事先得知f(0)=0。从而f(1)=1。然后f(2)、f(3)、f(4)等的值都能够计算出来