- 递归简单点说就是方法调用自己本身。直到满足某一条件退出方法。 下来结合一个小例子来说明其用途
package feilong.day1221;
import java.util.Scanner;
/**
* 递归调用 求阶乘
* 5=5*4*3*2*1=120
* @author Nanfeilong
*/
public class Diguidiaoyong_jiecheng {
public static void main(String[] args) {
System.out.println("输入整数求阶乘:");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
System.out.println(multiply(a));
scanner.close();
}
public static long multiply(int b) {
if(b<=0) return 1;//程序出口
else return b*multiply(b-1);//multiply(b-1) 调用本身
}
}
如果输入的是5的话,那么结果就等于 5*4*3*2*1=120
- 如果还不明白的话我们在来看一个例子,
package feilong.day1221;
import java.util.Scanner;
/**
* 递归调用 (a)1+2+3+4...100
* @author Nanfeilong
*/
public class Diguidiaoyong {
public static void main(String[] args) {
System.out.println("求和从输入的数加到100");
int a = new Scanner(System.in).nextInt();
System.out.println(addnum(a));
}
public static int addnum(int num){
if(num==100) return 1;//程序出口
else return num+addnum(num+1);//addnum(num+1) 调用本身
}
}
例如输入98 那么结果就是98+99+1=198 为什么呢,
因为当等于100时返回的是1
- 斐波那契数列就是后面的一个数是前面两个数的之和
/**
* 递归使用斐波那契数列
* @author Nanfeilong
*
*/
package feilong.day1221;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
/*
* 斐波那契数列
* 1 1 2 3 5 8 13 21 34 55 89 144...
*/
System.out.println("求第几个斐波那契数列?");
int n = new Scanner(System.in).nextInt();
long r = g(n);
long f = f(n);
System.out.println("斐波那契数列的第"+n+"个数是:"+f);
System.out.println(r);
}
private static long g(int n) {
long a = 1;
long b = 1;
for(int i = 3; i<=n; i++){
b=a+b;
a=b-a;
System.out.println("===========");
System.out.println(b);
System.out.println(a);
}
return b;
}
private static long f(int n) {
if(n==1||n==2) {
return 1;
}
return f(n-1)+f(n-2);
}
}
求第几个斐波那契数列?
5
2
1
3
2
5
3
斐波那契数列的第5个数是:5
5