为什么我的Pascal的三角代码不起作用?

问题描述 投票:0回答:1

我一直在尝试使用组合公式来写Pascal的三角形,但是它不能正常工作,我不确定是什么问题?

这里是输入:

public class Probs {
public static int fact(int n) {
    int f;
    for(f = 1;n>1;n--) {
        f*=n;
    }

    return f;
}
public static int comb(int i, int j) {

    return fact(i)/ fact(i-j)*fact(j);

}


public static void main (String[]args) {
    int n =5;
    int i;
    int j;
    for( i = 0;i<n;i++) {
        for( j = 0;j<n-i;j++) {
            System.out.print(" ");
        }
        for( j=0;j<=i;j++) {
            System.out.print(" " + comb(i,j));
        }
        System.out.println();

    }

    }
     }

输出:

    1
   1 1
  1 2 4
 1 3 12 36
1 4 24 144 576

您能以适合初学者的方式解释我的原因吗?预先感谢。

java algorithm pascals-triangle
1个回答
3
投票

您需要在comb()中的操作周围添加括号以获取正确的优先级。

/*的优先级都相同,所以在您写时

返回事实(i)/事实(i-j)*事实(j);

此表达式实际上等效于

return 事实(i)/事实(i-j) * fact(j);

不是您真正想要的...

通过在分母的产品周围添加括号来固定:

返回事实(i)/ 事实(i-j)*事实(j)
© www.soinside.com 2019 - 2024. All rights reserved.