递归方法:一个方法体内调用它自身。
方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执 行无须循环控制。
递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
例1:
//计算1-100之间所有自然数的和
public class Test {
public static void main(String[] args) {
int sum =0;
sum = add(100);
System.out.println("1-100之间所有自然数的和 为:"+sum);
}
public static int add(int num){
if(num == 1){
return 1;
}else{
return num + add(num - 1);
}
}
}
结果:
注意:递归的使用一定要注意器方向性:
例2
/*
* 已知有一个数列:f(0) = 1,f(1) = 4,
* f(n+2)=2*f(n+1) + f(n),其中n是大于0 的整数,
* 求f(10)的值。
*/
public class test {
public static void main(String[] args) {
int n =10;
test s1 =new test();
int sum = s1.f(n);
System.out.println("f(10)的值为:"+sum);
}
public int f(int n) {
int s = 0;
if(n==0) {
s = 1;
}
else if(n==1) {
s = 4;
}
else if(n>0) {
s= f(n-2)+2*f(n-1);
}
return s;
}
}
结果:
例3:
/*
* 已知一个数列:f(20) = 1,f(21) = 4,
* f(n+2) = 2*f(n+1)+f(n),
* 其中n是大于0的整数,求f(10)的值。
*/
public class test {
public static void main(String[] args) {
int n =10;
test s1 =new test();
int sum = s1.f(n);
System.out.println("f(10)的值为:"+sum);
}
public int f(int n) {
int s = 0;
if(n==20) {
s = 1;
}
else if(n==21) {
s = 4;
}
else if(n>0) {
s= f(n+2)-2*f(n+1);
}
return s;
}
}
结果:
要根据所给条件判断递增是从n-1还是n+1开始