0

私は教科書で以下のコードを勉強しています。組み合わせ法と階乗法を使用して、nとkが与えられた場合に考えられる結果を計算します。私の質問は、階乗メソッド、特にforループのコンテンツに関するものです。

私はプログラムに関する他のすべてを理解していますが、階乗メソッドのforループのコードi<=nを理解していません。プログラムの他のどの部分が参照されていますか?i <= nの背後にある理論的根拠や、プログラマーがそれをどのように思いついたのか、私にはよくわかりません。

import acm.program.*;

public class combinations extends ConsoleProgram {
    public void run(){
        int n = readInt("Enter the number of objects in the set (n): ");
        int k = readInt("Enter the number to be chosen (k): ");
        println("C (" + n + ", " + k + ") = " + combinations (n, k) );

    }

    private int combinations (int n, int k){
        return factorial (n) / (factorial (k) * factorial (n-k));

    }


    private int factorial (int n){
        int result = 1; 

        for (int i = 1; i <= n; i++){
            result *= i;

        }
        return result;

    }

}
4

4 に答える 4

4

nはメソッドのパラメータです。メソッドはとして宣言されているためint factorial(int n)、(たとえば)として呼び出してfactorial(5)、ローカル変数nをに設定し5ます。(正式な用語でnは、はパラメーター5あり、引数ですが、通常、人々はこれら2つの用語を区別することを気にしません。)

于 2012-12-30T23:06:56.080 に答える
2

だから、少し数学。通常、数式を扱う場合、数学の慣習が頻繁に使用されます。 nは通常、メソッドが参照する必要のある上限値を参照します。

基本的に、階乗の関数定義はこれです。

factorial(n) = {  1 if n = 0, n*factorial(n-1) otherwise.

ループにはnの最終値が含まれているため、関数の完全な式が得られます(含まれていない場合、答えは毎回n倍ずれます。

于 2012-12-30T23:15:53.090 に答える
1

3の階乗を計算するときは、i<=nが必要です。たとえば、3つあります。= 3 * 2 * 1 <=> 1 * 2 * 3

つまり、n、つまり3があり、iは1、次に2、次に3(n)です。

于 2012-12-30T23:14:20.660 に答える
0

よく見ると、in loop for iは1からnまでの値をとるので、i=nではpointforループが終了していることがわかります。この形式でループforが作成され、factorial(0)=1になります。ただし、この関数は再帰的なスタイルで再設計できます。

于 2012-12-30T23:13:03.140 に答える