- 遞歸簡單點說就是方法調用自己本身。直到滿足某一條件退出方法。 下來結合一個小例子來說明其用途
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