数据结构与算法分析笔记
什么是递归
当一个函数用它自己来定义时就称为递归(recursive)
但重要的是,Java提供的仅仅是遵循递归思想的一种尝试。不是所有的数学递归函数都能被有效的由Java的递归模拟来实现。
当编写递归例程时要牢记递归的四条基本法则
- 基准情形 必须总要有某些基准情形,它无需递归就能解出。
- 不断推进 对于那些需要递归求解的情形,每一次递归调用都必须要使状况朝向一种基准情形推进。
- 设计法则 假设所有递归调用都能运行。
- 合成效益法则 在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性工作。
例如
punlic static int f(int x){
if (x == 0)
return 0;
else
return 2*f(x-1) + x * x; //这个就是可以的
}
public static int bad (int n){
if(n == 0)
return 0;
else
return bad(n/3 + 1) + n - 1; //这个就无中止递归
}
实例
打印输出整数
public class Print {
public static void printOut(int n){
if(n>=10){
printOut(n/10);
}
System.out.print(n%10);
}
/**
* @param args
*/
public static void main(String[] args) {
Print p = new Print();
p.printOut(7634);
// TODO Auto-generated method stub
}
}