基本思想
自己调用自己
递归的缺陷
算法简单是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。
public class digui {
static long jiechen(int n) {
long sum = 1;
if (n < 0)
sum = -1;
else if (n == 1)
sum *= n;
else {
sum = n * jiechen(n - 1);
}
return sum;
}
public static void main(String[] args) {
long start = System.nanoTime();//当前时刻
long sum = jiechen(10);
long end = System.nanoTime();//当前时刻
long sum1 = 1;
long start1 = System.nanoTime();//当前时刻
for (int i = 1; i < 11; i++)
sum1 *= i;
long end1 = System.nanoTime();//当前时刻
System.out.println("10!=" + sum);
System.out.println("10!=" + sum1);
System.out.println("递归耗时:" + (end - start));
System.out.println("循环耗时:" + (end1 - start1));
}
}
用法举例
用递归求n!
import java.util.Scanner;
public class digui {
static int jiechen(int n) {
int sum = 1;
if (n < 0)
sum = -1;
else if (n <= 1)
sum *= n;
else {
sum = n*jiechen(n-1);
}
return sum;
}
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int n= s.nextInt();
int sum=jiechen(n);
System.out.println(n+"!="+sum);
}
}
常见问题
爆栈---栈溢出,常发生于无穷循环或无休止自身调用
public class baozhan {
static void aa() {
System.out.println("aa");
aa();
}
public static void main(String[] args) {
aa();
}
}