牛顿二项式系数C ++算法

时间:2015-04-16 09:20:54

标签: c++

所以我们必须使用函数计算二项式系数。 为了做到这一点,我为阶乘演算创建了一个函数,并使用后者计算了可能组合的数量。 它们都运行良好(在之前的练习中完成)但由于某种原因,当我现在运行代码时,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;
}

2 个答案:

答案 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 变量的初始化。