带递归的堆栈溢出exception

我正在尝试制作一个计算双因子的程序( 例如 – n = 3,=>(3!)!= 6!= 720 )但我有一些递归底部的问题,我有堆栈溢出exception。

public static long df(long n) { if (n == 1) { return 1; } else { return df(n * df(n - 1)); } } public static void main(String[] args) { System.out.println(df(3)); } 

你遇到了一个带有df(n * df(n - 1));的无限循环df(n * df(n - 1));

n * df(n-1)将计算阶乘,并且你无意中将你的答案反馈回递归方法,导致它永远继续

更改

 return df(n * df(n - 1)); 

 return n * df(n - 1); 

你应该得到正则的因子


一旦你有了这个有效的递归因子方法,只需使用df(df(3))就可以更容易地创建一个双因子

我认为你应该在factorial的帮助下使用相互递归。

一般的g因子函数可以构成阶乘g次:

 public static long gf(long n, long g) { if (g == 1){ return fact(n); } return fact(gf(n, g - 1)); } 

具体的双因子可以是gf(n, 2)

 public static long df(long n) { return gf(n, 2); } 

和阶乘辅助函数:

 public static long fact(long n) { if (n == 1) { return 1; } else { return n * fact(n - 1); } } 

现在测试:

 public static void main(String[] args) { System.out.println(df(3)); } 

之前在Stack上问。 如果代码不存在,你应该检查Wiki …

它存在….

算法[修饰符| 修改器代码] Le calcul de la factorielle peut se traduire par l’algorithmerécursifuivant,écritenpseudo-code:

Fonction factorielle(n:entier):entierDébut
Si n> 1 Retourner n * factorielle(n – 1)Sinon Retourner 1 Fin si Fin

[ https://fr.wikipedia.org/wiki/Factorielle#Algorithme%5D

刚看完维基,答案就是写的……