当一个函数用它自己来定义时酒称之为递归(recursive)的。在编写递归函数时要遵循如下四个法则
1.基准情形。必须存在某些情况,在无须递归时就能解出。如
/**
* @authorliuyijie
* @deprecated f(x) = 2f(x-1)+x*x 递归算法:当x==0时不再调用递归此时跳出循环
* @param x
* @return x
*/
publicint f(int x){
if(x==0)
return 0;
else
return 2*f(x-1)+x*x;
}
2.不断推进。递归的调用必须向着某种基准情况不断循环推进。
/**
* @deprecated 此程序虽然也是一个递归程序可是由于不能向着一个能跳出循环的方向进行会导致死循环
* @param n
* @throws java.lang.StackOverflowError
* @return
*/
publicstatic int unMatch(int n){
if(n==0)
return 0;
else
return unMatch(n/3+1)+n-1;
}
3.设计法则。假设所有的递归调用都是能运行的。
4.合成效益法则。在求解一个问题是我同一实例时,切勿在不同的递归调用中做重复性的工作。