Recursion 如何递归计算阶乘的阶乘?
我遇到了以下问题: N是正的非零整数,我必须计算: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-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;
}