用递归实现斐波那契数列 斐波那契数列递归算法?
浏览量:2863
时间:2021-03-16 12:43:01
作者:admin
斐波那契数列递归算法?
答:斐波那契数列递归算法是:在一列数中,从第三项开始,每项数等于和它相邻的前面两项数的和。用递推式表示为:an 2=an 1 an(n≥1)
尾递归究竟是好是坏?
概念
递归如果层次太多,就会照成栈溢出异常,因为每调用一次就会新生成一个栈帧,使用这个栈帧保留当前函数的状态值。如果没有必要保存状态值,那么就可以复用栈帧,不会造成栈溢出。
举例
这里以求n的阶乘举例:
正常递归:
假如n=3;那么每一步都需要保留n值以及下一步函数的返回值,所以每次调用都需要创建一个新的栈帧
尾递归:
假如n=3,这里每一次调用是可以复用栈帧的,因为不需要保存状态值。
总结
所以说当递归是在当前栈帧执行完之后,不需要再保留当前栈帧,而是带着当前栈帧的结果,进入到下一栈帧,就可以优化为尾递归,一般尾递归需要满足递归调用是函数体中最后执行的语句。比如阶乘的例子中最后执行的语句是直接调用factorial(n-1, n*result),而不是一个表达式n * factorial(n -1),如果是表达式的话就需要一个栈帧来保留n和factorial(n -1)的结果。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。