我一直在尝试使用组合公式来写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
您能以适合初学者的方式解释我的原因吗?预先感谢。
您需要在comb()
中的操作周围添加括号以获取正确的优先级。
/
和*
的优先级都相同,所以在您写时
返回事实(i)/事实(i-j)*事实(j);
此表达式实际上等效于
return (事实(i)/事实(i-j)) * fact(j);
不是您真正想要的...
通过在分母的产品周围添加括号来固定:
返回事实(i)/ (事实(i-j)*事实(j));