【发布时间】:2020-04-12 13:44:00
【问题描述】:
我在实现以下问题的尾递归解决方案时遇到了困难:
双阶乘还有一个递归关系,也依赖于阶乘,就是上面的:(for n
我必须实现这个方程的递归关系-我按照上面的代码所做的工作:
long long factorial(int n) {
if (n < 0)
return 0;
if (n < 1)
return 1;
return n * factorial(n - 1);
}
long long doublefactorial(int n) {
if (n < 0)
return 0;
if (n < 2)
return 1;
return factorial(n) / doublefactorial(n - 1);
}
现在我必须使用 尾递归 来解决同样的问题。有人可以告诉我如何做到这一点,因为我无法弄清楚。 (也不需要以尾递归的方式实现阶乘函数)
测试用例:
- 5!! = 15
- 10!! = 3840
- 18!! = 185,794,560
- -10!! = 0
【问题讨论】:
-
向我们展示你对尾递归的尝试
-
我建议你先尝试阶乘函数的尾递归版本(这在互联网上既容易又容易找到)
-
@muyustan 他们要求我们仅从 n=0 到 n=20 实施
-
@nicomp 我没有尝试过,因为我不知道该怎么做,我知道我需要向函数添加更多变量但不知道如何将其变成尾递归。
-
n!! = n(n-2)(n-4) ...(1 或 2,取决于 n 是奇数还是偶数)。所以一个计算 n 的尾递归函数!看起来几乎与 n! 相同。
标签: c tail-recursion