实现阶乘函数时,"在所有控制路径上递归"错误

Ste*_*024 4 c++ stack-overflow recursion factorial compiler-warnings

对于上课我有一个任务:

写C++程序,将输出的不同方式,你可以挑选的数量k对象形成了一套的n对象(包括nk应为正整数).该数字由以下公式给出:

C(n, k) = n!/(k! * (n - k)!)

您的程序应该使用两个值返回函数.第一个应该被调用factorial,应该返回n!.应该调用第二个函数,combinations并且应该返回n!/(k! * (n - k)!).测试程序的不同值nk五次(计数控制循环).

我提出了一个解决方案:

#include <iostream>
using namespace std;
int factorial(int);
int combination(int, int);

void main(void)
{
    int objects, set_number, count; 
    count = 1; 
        while(count <= 5)
        {
            cout << "Please enter in number of objects ";
            cin >> objects; 
            cout << "Please enter in the number of Sets ";
            cin >> set_number;
            count++;
        }

    cout << "The Factorial is " << factorial(set_number) << " & the combination is " << combination << endl;
    cout << endl; 
}

// Factorial 
int factorial(int set_number)
{
    int cal;
    cal = set_number * factorial(set_number - 1);
    return cal; 
}

//  Combination
int combination(int objects, int set_number)
{
    int com_total, cal_set, cal_obj, min_sum, cal_min;

    cal_set = set_number * factorial(set_number - 1);
    cal_obj = objects * factorial(objects - 1);

    //n!/(k! * (n - k)!)
    min_sum = set_number - objects; 
    cal_min = min_sum * factorial(min_sum- 1);
    com_total = cal_set / (cal_obj * cal_min);
    return com_total; 
}
Run Code Online (Sandbox Code Playgroud)

......但我不断收到错误,说;

"'factorial':在所有控制路径上递归,函数将导致运行时堆栈溢出;"

如果有人可以帮助我,我已经在这工作了大约一个小时,我很难过!

Gre*_*ill 17

递归函数定义有两个关键元素:

  • 对自身的递归调用
  • 一个终止条件

您似乎错过了终止条件.怎么会factorial()永远放弃自称?

  • +1没有示例代码的好作业答案. (5认同)