什么是递归
首先我们可以在非负整数集上定义一个函数f,它满足f(0)=0,f(x)=2*f(x-1)+x^2;从这个定义中我们可以看到f(1)=1,f(2)=6,f(3)=21;如同这样在方法体中直接或者间接调用自身的方法就叫做递归方法。
public class CircleText {
public static void main(String[] args) {
System.out.print(circle(3));
}
public static int circle(int x){
if(x==0) {
return 0;
}
else {
return 2*circle(x-1)+x^2;
}
}
}
运行结果为21
递归适合解决的问题:
把一个复杂的问题分解多个缩小了规模的相同问题;
递归的四条基本法则:
1.基准情形:
必须有基准情形,它无需递归就能解出。(递归方法一定要有一个结束条件)
2.不断推进:
对于那些需要递归求解的情形,每一次递归调用都必须朝着基准情形推进。
3.设计法则:
假设所有的递归调用都能运行。
4.合成效益法则:
在求解一个问题的同一种实例时,切勿在不同的递归调用中做重复的工作。
例:写一个使用递归累加求和的方法:
//递归求和
public static int sum(int x) {
if(x==1) {
return 1;
}else {
return sum(x-1)+x;
}
}