J'essaie de calculer de grands nombres de la séquence de Fibonacci, d'où la raison pour laquelle j'utilise un grand nombre entier. Je peux aller jusqu'à environ 10000 comme ça, mais je n'ai plus d'espace dans la pile. Je réalise que je peux augmenter l'espace de pile et de tas, mais je crois comprendre que la récursion de queue peut contourner le problème d'espace. Voici mon code ..Comment implémenter la récursion de queue avec ma méthode Fibonacci?
public class FibRecursion{
static BigInteger[] fval;
public static void main(String[] args) {
int index;
Scanner input = new Scanner(System.in);
index = input.nextInt();
fval = new BigInteger[index + 1];
System.out.println(fib_rec(index));
}
public static BigInteger fib_rec(int index){
BigInteger result = BigInteger.ONE;
if(index <= 2){
return result;
}
else{
if(fval[index] != null){
result=fval[index];
}
else{
result = fib_rec(index-1).add(fib_rec(index-2));
fval[index] = result;
}
return result;
}
}
}
Java n'a pas de récursivité de queue. Cependant, vous pouvez simplement utiliser la formule itérative – meowgoesthedog
voir https://stackoverflow.com/questions/32685660/achieving-stackless-recursion-in-java-8 pourrait être utile – Oleg
L'élimination de la récursion de queue, même si java l'avait, n'aiderait pas vous dans ce cas. Ce n'est pas seulement de la poussière magique qui rend tout code récursif efficace. – pvg