递归的四条基本法则
- 基准情形。必须总要有某些基准情形,他无需递归就能解出。
- 不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使状况朝向一种基准情形推进。
- 设计法则。假设所有的递归调用都能运行。
- 合成效益法则。在求解一个问题的同意实例时,切勿在不同递归调用中做重复性的工作。
【Mark Allen Weiss–Data Structures Algorithm Analysis in Java】
Demo:
public class PrintDigit {
public static void main(String[] args) {
int n = 123456;
resolve(n);
System.out.println();
System.out.print("-----------------------");
System.out.println();
printOut(n);//递归输出分解后的数
}
//递归
public static void printOut(int n)
{
if(n>=10)
printOut(n/10);
System.out.print(n%10+" ");
}
//顺序结构
public static void resolve(int n)
{
int [] a= new int[Integer.bitCount(n)];
for(int i=0;n>0;i++)
{
a[i]=n%10;
n/=10;
}
for (int i = (a.length-1); i>=0; i--) {
System.out.print(a[i]+" ");
}
}
}
Result:
1 2 3 4 5 6
-----------------------
1 2 3 4 5 6
输出结果一样,但是递归代码简洁许多,而且递归策略是从第一位开始往下输出,而正常分解的话,还需要数组进行转换。