• 3、递归


    3、递归

      3.1 基线条件和递归条件

        每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。

        递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。

        代码清单3-1 递归

    # -*- coding:UTF-8 -*-
    def countdown(i):
        print i
        # 基线条件
        if i <= 0:
            return
        # 递归条件
        else:
            countdown(i-1)
    
    
    print countdown(5)

      3.2 栈

        栈是一种简单的数据结构。

        代码清单3-2 调用栈

    # -*- coding:UTF-8 -*-
    def greet(name):
        print "hello, " + name + "!"
        greet2(name)
        print "getting ready to say bye..."
        bye()
    
    
    def greet2(name):
        print "how are you, " + name + "?"
    
    
    def bye():
        print "ok bye!"
    
    
    greet("maggie")
    
    # result:
    # hello, maggie!
    # how are you, maggie?
    # getting ready to say bye...
    # ok bye!

         代码清单3-3 递归调用栈

    # -*- coding:UTF-8 -*-
    # 计算3!阶乘的递归函数
    
    
    def fact(x):
        if x == 1:
            return 1
        else:
            return x * fact(x-1)
    
    
    print fact(3)

        递归指的是调用自己的函数。

        每个递归函数都有两个条件“基线条件和递归条件。

        栈由两种操作:压入和弹出。

        所有函数调用都进入调用栈。

        调用栈可能很长,这将占用大量的内存。

  • 相关阅读:
    C#构造方法重载
    coffeeScript 语法总结
    JavaScript常用代码段
    CSS选择器,CSS3选择器
    CSS实用的代码段
    Gdb 调试
    Keras同时有多个输出时损失函数计算方法和反向传播过程
    PyTorch 速查
    Keras自定义Layer使用说明
    TensorFlow Variable 和 Tensor 的区别
  • 原文地址:https://www.cnblogs.com/Lamfai/p/10763334.html
Copyright © 2020-2023  润新知