java 遞歸recursion的使用
/**
* 測試遞歸recursion
*/
public class TestRecursion2 {
? ?public static int m = 0;
? ?public static int factorial(int n){
? ? ? ?//factorial階乘
? ? ? ?m++;
? ? ? ?if (m<n){
? ? ? ? ? ?return m*factorial(n);
? ? ? ?}else{
? ? ? ? ? ?m = 0;
? ? ? ? ? ?return n;
? ? ? ?}
? ?}
? ?public static void main(String[] args) {
? ? ? ?System.out.println(factorial(10));
? ? ? ?System.out.println(10*9*8*7*6*5*4*3*2);
? ?}
}
class TestRecursion3{
? ?//計算斐波那契數(shù)列 [1,2,3,5,8,13,21.....]每一位是前兩位的和
? ?public static int abc(int n) {
? ? ? ?//計算第n位的值
? ? ? ?if (n > 2) {
? ? ? ? ? ?return abc(n - 1) + abc(n - 2);
? ? ? ?} else if (n==2) {
? ? ? ? ? ?return 2;
? ? ? ?}else return 1;
? ?}
? ?public static int def(int n){
? ? ? ?if (n<2){
? ? ? ? ? ?return 1;
? ? ? ?}else if (n<3){
? ? ? ? ? ?return 2;
? ? ? ?}
? ? ? ?int a1 = 1;
? ? ? ?int a2 = 2;
? ? ? ?int result = a1+a2;
? ? ? ?for (int i =4;i<=n;i++){
? ? ? ? ? ?a1 = a2;
? ? ? ? ? ?a2 = result;
? ? ? ? ? ?result = a1+a2;
? ? ? ?}
? ? ? ?return result;
? ?}
? ?public static int ghi(int n){
? ? ? ?if (n<2){
? ? ? ? ? ?return 1;
? ? ? ?}else if (n<3){
? ? ? ? ? ?return 2;
? ? ? ?}
? ? ? ?int[] arr = new int[n];
? ? ? ?arr[0] = 1;
? ? ? ?arr[1] = 2;
? ? ? ?for (int i=2;i<n;i++){
? ? ? ? ? ?arr[i] = arr[i-1]+arr[i-2];
? ? ? ?}
? ? ? ?return arr[n-1];
? ?}
? ?public static void main(String[] args) {
? ? ? ?int n = new Random().nextInt(20)+1;
? ? ? ?System.out.println(n);
? ? ? ?System.out.println(abc(n));
? ? ? ?System.out.println(def(n));
? ? ? ?System.out.println(ghi(n));
? ?}
}