【发布时间】:2023-03-25 09:27:01
【问题描述】:
我试图在我的 C 代码中实现以下公式时遇到了困难:
不!! = N!/(N-1)!!
代码应该是一个尾递归函数,虽然它确实有效并且计算是正确的,但我很确定这不是一个尾函数 + 我真的不知道返回期间发生了什么阶段。
我当前的代码:
long long int Factorial(int n)
{
if (n < 0)
return 0;
if (n == 0 || n == 1)
return 1;
return (n*Factorial(n - 1));
}
int DoubleFactorialTail(int n, int fact)
{
if (n < 0)
{
return 0;
}
if (n == 0 || n == 1)
{
return fact;
}
else
{
long long int factorial = Factorial(n);
return (factorial / DoubleFactorialTail(n - 1, fact));
}
}
我知道双阶乘尾递归函数应该在最后调用递归函数,但这里我所做的是将它除以值(在这种情况下是递归的),这就是为什么我不是所以确定我的实现是正确的。
编辑:
我最初尝试实现以下内容:
long long int DoubleFactorialTail(int n, int fact)
{
if (n < 0)
{
return 1;
}
if (n == 0 || n == 1)
{
return fact;
}
else
{
return (DoubleFactorialTail(n - 2, fact*n));
}
}
结果将是:
res = (Factorial(n)/DoubleFactorialTail(n-1, 1));
问题是,我们被告知对于 n
【问题讨论】:
-
您的递归调用都不是尾递归的。首先考虑阶乘,不需要递归定义
-
这是一个练习吗?我不会以这种方式或递归方式计算双阶乘。
-
是的,第一个不是尾递归函数,只有第二个应该是尾。
-
这只是一个练习,我肯定也会以其他方式完成它????
-
先写成循环,再转成递归。然后应该更容易理解
标签: c recursion factorial tail