为factorial编写方法

时间:2012-12-30 23:04:41

标签: java

我正在我的教科书中学习以下代码。它使用组合方法和因子方法来计算给定n和k的可能结果。我的问题是使用factorial方法,特别是for循环中的内容。

我理解程序的其他所有内容,但我不理解在factorial方法的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 个答案:

答案 0 :(得分:4)

n是方法的参数:因为该方法声明为int factorial(int n),所以您将其调用为(例如)factorial(5)以获取局部变量n设为5。 (在形式上,n参数5参数,但通常人们都不愿意区分这两个术语。 )

答案 1 :(得分:2)

所以,有点数学。通常,当处理数学表达式时,经常使用数学约定。 n 通常被称为该方法应引用的某些上限值。

基本上,阶乘的函数定义就是这个。

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

循环包含 n 的最终值,所以你得到了函数的完整表达式(如果你没有,你的答案就会被一个因素所取代)每次 n

答案 2 :(得分:1)

你需要我&lt; = n因为你计算3的阶乘!例如,你会有 3! = 3 * 2 * 1&lt; =&gt; 1 * 2 * 3

所以,你有你的n,即3,i是1,然后是2,然后是3(n)。

答案 3 :(得分:0)

如果你仔细观察,你会看到循环中的i取1到n的值,所以在i = n点,循环终止。循环for以此形式创建,以确保factorial(0)= 1。但是,您可以以递归方式重新设计此功能。