Recursion 如何递归计算阶乘的阶乘?

Recursion 如何递归计算阶乘的阶乘?,recursion,data-structures,computer-science,Recursion,Data Structures,Computer Science,我遇到了以下问题: N是正的非零整数,我必须计算:N*(N-1)^2*(N-2)^3*。*1^N 到目前为止,我的解决办法如下: N*myFact(N-1)*fact(N-1) 问题是我不允许使用任何帮助函数,例如“fact()” 编辑:从数学上讲,它可以表示为:N*(N-1)!(N-2)*1! 试试看: int myFact(int n) { return n == 1 ? 1 : myFact(n-1)*n; } 我假设这需要使用一个函数来完成,即不允许您自己创建facthelper函

我遇到了以下问题: N是正的非零整数,我必须计算:
N*(N-1)^2*(N-2)^3*。*1^N

到目前为止,我的解决办法如下:
N*myFact(N-1)*fact(N-1)

问题是我不允许使用任何帮助函数,例如
“fact()”

编辑:从数学上讲,它可以表示为:N*(N-1)!(N-2)*1!

试试看:

int myFact(int n) {
  return n == 1 ? 1 : myFact(n-1)*n;
}

我假设这需要使用一个函数来完成,即不允许您自己创建
fact
helper函数

您可以使用
myFact(n-1)/myFact(n-2)=(n-1)


此函数称为。可以使用递归实现

long superFact(n) {
  if (n < 2) return 1;
  long last = superFact(n-1);
  long prev = superFact(n-2);
  return last * last / prev * n;
}
long superFact(n){
如果(n<2)返回1;
long last=superFact(n-1);
long-prev=superFact(n-2);
返回last*last/prev*n;
}

但这是非常低效的——大约需要3*F(n)个递归调用才能找到
superFact(n)
,其中
F(n)
是第n个斐波那契数。(工作量呈指数级增长。)

谢谢。这并不能解决问题,它给出了N!,我需要计算的是,假设N=5:5*(4^2)*(3^3)*(2^4)*(1^5),可以转换为5*4!*3!*2!*1.能提供一个结果的例子吗?
long superFact(n) {
  if (n < 2) return 1;
  long last = superFact(n-1);
  long prev = superFact(n-2);
  return last * last / prev * n;
}