递归

作者: jojo1313 | 来源:发表于2019-11-25 17:19 被阅读0次

    递归就是在函数内部调用其自身完成计算任务.
    底层:在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出

    使用递归注意两个点
    1.递归函数第一步,先定义退出递归条件,避免无线递归栈溢出
    2.返回递归计算结果

    递归常用场景:
    计算斐波,计算阶乘,字符串翻转,二叉树求高度,判断回文数,汉诺塔移动

    Note:
    1.使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
    2.针对尾递归优化的语言可以通过尾递归防止栈溢出,Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题。

    #/bin/python
    #翻转字符串
    def reserver(strs):
        if len(strs)<=1:
            return strs
        return reserver(strs[1:])+strs[0]
    if __name__== '__main__':
        a="abcdefg"
        print(reserver(a))
    [root@localhost ~]# python digui.py 
    gfedcba
    
     #/bin/python
    #斐波那契数列
    def fib(n):
        if n==0:
            return 0
        if n==1:
            return 1
        return fib(n-1)+fib(n-2)
    
    if __name__== '__main__':
        print(fib(7))
    

    相关文章

      网友评论

          本文标题:递归

          本文链接:https://www.haomeiwen.com/subject/mvljwctx.html