首页 > 编程知识 正文

java递归栈溢出解决方法,递归改成非递归必须使用栈

时间:2023-05-06 01:23:56 阅读:153348 作者:1919

普通fibonacci :

函数Fibonacci (n ) {

return n 2? n :光纤通道(n-1 )光纤通道(n-2 );

}

调用堆栈应该是这样的。 第五个调用堆栈的长度为8,长度越来越长,越容易引起堆栈溢出。

[Fibonacci(5]) ]

[fibonacci(3(4) Fibonacci )3]

[Fibonacci(3) Fibonacci (2) ) Fibonacci (2) Fibonacci (1) ]

[(Fibonacci )2) Fibonacci(1) [(Fibonacci )1) Fibonacci(1) ) ) Fibonacci ) )1) Fibonacci ) )0)

[Fibonacci(1) Fibonacci )0) Fibonacci )1) Fibonacci )1) Fibonacci )0) Fibonacci )0)

变更为末尾递归方式

函数Fibonacci2(n ) {

vara=arguments.length1arguments [1]!==undefined? arguments[1] : 0;

varb=arguments.length2arguments [2]!==undefined? arguments[2] : 1;

if(n==0

return a

}

returnFibonacci2(n-1,b,a b );

}

调用栈应该一直是一个长度,不知道是否正确?

Fibonacci2(5)==Fibonacci2(5,0,1 ) )。

Fibonacci2(4,1,1 ) )。

Fibonacci2(3,1,2 ) )。

Fibonacci2(2,2,3 ) )。

Fibonacci2(1,3,5 ) )。

Fibonacci2(0,5,8 )=return 5

但是,调用Fibonacci2(10000 )时,将报告uncaughtrangeerror : maximumcallstacksizeexceeded错误。 为什么会这样呢?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。