递归方法:一个方法体内调用它自身。
方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执 行无须循环控制。
递归一定要向已知方向(设定结束条件)递归,否则这种递归就变成了无穷递归,类似于死循环。
例如求n以内的自然数的总和:
package recursionTest;
public class recursionTest {
public static void main(String args[]){
/**
* 求100以内的自然数的总和
*
*/
recursionTest r=new recursionTest();
int sum=r.getRecursionTest(100);
System.out.println(sum);
}
public int getRecursionTest(int num){
//设定的特殊条件
if (num ==1){
//满足其条件则停止,或输出特殊情况
return 1;
}else{
//循环结构
return num +getRecursionTest(num-1);
} }
}
求n以内的自然数的阶乘:
package recursionTest;
public class recursionTest {
public static void main(String args[]){
/**
* 求100以内的自然数的总和
*
*/
recursionTest r=new recursionTest();
//阶乘
int sumAll=r.getRecursionTest1(25);
System.out.println(sumAll);
}
//求1到n之间的阶乘:n!
public int getRecursionTest1(int n){
if (n==1){
return 1;
}else {
return n * getRecursionTest1(n-1);
}
}
}
练习题:
package recursionTest;
public class recursionTest1 {
public static void main(String args[]){
recursionTest1 r=new recursionTest1();
int ten=r.getSum(10);
System.out.println(ten);
int two=r.Sum(9);
System.out.println(two);
}
/**
*
* 已知一个数列:f(20) = 1,f(21) = 4,f(n+2) = 2*f(n+1)+f(n),
其中n是大于0的整数,求f(10)的值。
*/
public int getSum(int n){
if(n==0) {
return 1;
}else if (n==1){
return 4;
}else {
return 2*getSum(n-1)+getSum(n-2);
}
}
/**
* 斐波那契数列的第n个值
* @param n
* @return
*/
public int Sum(int n){
if (n==1||n==2){
return 1;
}else {
return Sum(n-2)+Sum(n-1);
}
}
}
参考来自尚硅谷