1

代码的目的是找到二项式系数 (n,k) 我收到运行时错误

import java.util.*;

public class pract5ex11 {
public static long combinRec (int n, int k){
    long answer;
    if (k==0 || n==k) {
            answer = 1;
        }
    else {

        answer = combinRec(n-1,k)+combinRec(n-1,k-1);

    }
    return answer;
}

public static void main (String []args){
    Scanner s = new Scanner(System.in);
    System.out.println("Enter first number");
    int n = s.nextInt();
    System.out.println("Enter second number, must be equal or greater");
    int k = s.nextInt();
    System.out.println(combinRec(n,k));

}
}

另外我在某些方面感到困惑:_ java中的静态和非静态意义命令行中心线java中的关键字“this”如果有某些网站或参考资料可以通过它们理解这些点我将不胜感激,谢谢

4

1 回答 1

1

你把它颠倒过来了:k应该更小/相等,否则你会有一系列的调用

if (k == 0 || n == k) {

永远不会输入导致 a StackOverflowError,因为您正在重复调用combinRec(n - 1, k),并且这不会改变k. 因此,如果n < kk != 0,则k == 0 || n == k永远不会为真。但是,如果k < n,它最终将是正确的,因为反复减去1fromn最终会n等于k

于 2013-06-20T22:24:59.443 回答