首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 遞歸計算階乘:5! 實現與通用模板

     編輯:Java 相關知識

遞歸定義

n! = n * (n-1)!,基例 0! = 1! = 1。

版本一:掃描器輸入


import java.util.Scanner;

public class FactorialRecursive {
    public static long fact(int n) {
        if (n <= 1) return 1;
        return n * fact(n - 1);
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(n + "! = " + fact(n));
    }
}

版本二:靜態內部類封裝


public class FactorialDemo {
    static class Calculator {
        long fact(int n) {
            return n <= 1 ? 1 : n * fact(n - 1);
        }
    }
    public static void main(String[] args) {
        Calculator c = new Calculator();
        System.out.println("5! = " + c.fact(5)); // 120
    }
}

注意事項

  • long 最大支援 20! (2.43e18);21! 溢出
  • 大數請用 BigInteger:BigInteger.ONE 起始,multiply(BigInteger.valueOf(i))
  • 遞歸深度 n,n > 10000 可能棧溢出,大數階乘建議迭代

迭代版本 (生產推薦)


long factIter(int n) {
    long r = 1;
    for (int i = 2; i <= n; i++) r *= i;
    return r;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved