我仍然无法使用基本递归。所以我有两个功能显示为
unsigned long factorial(int x)
{
// recursive function to find factorial
if(x==1)
return 1; // base case
return x * (factorial(x-1)); // recursive call
}
int choose(int choose, int choose_from)
{
// function to find how many different ways to "choose"
// calls factorial function multiple times
return factorial(choose_from) / (factorial(choose) * factorial(choose_from - choose));
}
我的教练告诉我,这实际上是错误的,我应该在select函数中重复使用。我不知道如何将选择公式指定为 C(n,r)= n! /(r!·(n – r)!),由于要递归的只是阶乘,因此我只做了一个单独的阶乘函数。
在不使用新库的情况下,这两个函数将如何成为一个递归函数?
最佳答案
我认为您的教练希望您使用此recurrent definition:
C(N, 1) = N
C(N, K) = C(N, K-1) * (N + 1 - K) / K
这个定义使您避免在
choose
函数内部使用阶乘递归。关于c++ - 转换为递归函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40896953/