我得到了错误的答案:
int N = 6;
int r = 3;
long result = 1;
for(int i=1;i<=r;++i){
result *= (N-r+i)/(i);
}
输出:16
但是这个给出了正确的答案:
for(int i=1;i<=r;++i){
result *= N-r+i;
result /= i;
}
输出:20
请解释一下这种行为
第一个代码片段将
result
的当前值乘以 ((N-r+i)/(i))
。这等于说 result = result * ((N-r+i)/(i));
。
在第二个代码片段中,您将
result
的当前值乘以 (N-r+i)
,然后在 result
的值更新后。然后,您获取更新后的结果,然后将其除以 i
。您正在执行操作 result = (result * (N-r+i)) / i;
因此,在第一个代码片段中,您将更新
result
一次,在第二个代码片段中,您将更新 result
两次。