看一下这个函数:
int c(int n,int k) {
if (n<0 || k<0 || n<k) {
return 0;
}
int c=1,p=n-k,i=1;
while (n>p) {
c = c * n/i++; // <<<
n--;
}
return c;
}
当我将
c=c*n/i++
更改为c*=n/i++
时,函数不起作用。例如c(4,2)= 4(= 6 true)。 我追溯了:1.i ++ 2./ 3.* =和所有其他可能性,但没有答案。 为什么?编辑:这不是我的问题,因为人们知道。 当
c *= n / i ++
时,我问编译器为什么会回答c(4,2)= 4
。 我追溯了 */ ++,* ++ /,/ * ++,/ ++ *,++ */,++/*
,但答案根本不是4。 编译器的逻辑是什么?(抱歉我的英语不好)
return 0
后面的代码是if
语句块的一部分。 - Nasser Al-Shawwa