我遇到了以下问题:
N是正非零整数,我必须计算:N*(N-1)^2*(N-2)^3*..*1^N
的乘积。
到目前为止我的解决方案如下:
N*myFact(N-1)*fact(N-1)
事情是我不允许使用任何帮助功能,例如'fact()'
。
编辑:数学上它可以表示如下:N!*(N-1)! (N-2)! .. * 1!
答案 0 :(得分:0)
尝试:
int myFact(int n) {
return n == 1 ? 1 : myFact(n-1)*n;
}
答案 1 :(得分:0)
我认为这需要用1个函数来完成,即你不能自己创建fact
辅助函数。
您可以使用myFact(n-1) / myFact(n-2) == (n-1)!
int myFact(int n)
{
if (n == 0 || n == 1) {
return 1
} else {
// (n - 1)!
int previousFact = myFact(n - 1) / myFact(n - 2);
return myFact(n - 1) * previousFact * n;
}
}
答案 2 :(得分:0)
此功能称为superfactorial。递归实现是
long superFact(n) {
if (n < 2) return 1;
long last = superFact(n-1);
long prev = superFact(n-2);
return last * last / prev * n;
}
但效率非常低 - 需要大约3 * F(n)个递归调用来查找superFact(n)
,其中F(n)
是第n个斐波纳契数。 (工作呈指数级增长。)