所以我们必须使用函数计算二项式系数。
为了做到这一点,我为阶乘演算创建了一个函数,并使用后者计算了可能组合的数量。
它们都运行良好(在之前的练习中完成)但由于某种原因,当我现在运行代码时,eclipse停止工作。它应该取用户输入的数字(我的代码中为j
)并与i
(从0开始)与i
等于j
进行制作组合。有人有想法吗?
感谢。
#include <iostream>
using namespace std;
//factorial function
int fact(int a) {
int resultat = 1;
while (a > 0) {
resultat = resultat * a;
a = a - 1;
}
return resultat;
}
//combinations function
int combinaisons(int z, int y) {
int c;
c = ((fact(y)) / ((fact(z)) * (fact(y - z))));
return c;
}
int main() {
int i, j;
cout << "Entrez le degree" << endl;
cin >> j;
while (j < 0) {
cout << "Un nombre naturel svp!" << endl;
cin >> j;
i = 0;
}
//calculation of the binomial coefficient
while (i != j) {
cout << combinaisons(i, j) << endl;
i = i + 1;
}
return 0;
}
答案 0 :(得分:1)
当用户第一次输入正确的值时,您无法初始化i
。
使用声明初始化i
就足够了。
此外,您还没有处理i == j
,毕竟binom(j,j) = binom(j,0)
//change the condition
while (i <= j) {
cout << combinaisons(i, j) << endl;
i = i + 1;
}
答案 1 :(得分:0)
在你的主要内容中你有:
int i,j;
如果 J 为0,则永远不会为 i 指定值,因为而(j <0)永远不会为真。
然后你使用 j 和 i 就像它确定的行为一样,但没有为未初始化的变量定义行为( i 在这种情况下)。
使 while(i!= j)循环永远,然后悬挂日食。
可能的解决方案:
int i = 0,j = 0;
并从循环中删除 i 变量的初始化。