私は大量のフィボナッチ数列を計算しようとしています。なぜ大きな整数を使用しているのですか?私は約10000までそれを得ることができますが、私はスタック空間を使い果たします。私はスタックとヒープスペースを増やすことができますが、尾の再帰がスペースの問題を回避できることは私の理解です。ここに私のコードです。フィボナッチメソッドでテール再帰を実装するにはどうすればよいですか?
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にテール再帰がありません。しかし、反復式 – meowgoesthedog
を使用すると、https://stackoverflow.com/questions/32685660/achieving-stackless-recursion-in-java-8を参考にすることができます – Oleg
テール再帰の除去は、Javaがあっても役立たないでしょうあなたはこの場合です。再帰的なコードを効率的にするのは魔法のダストだけではありません。 – pvg