zoukankan      html  css  js  c++  java
  • 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)

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

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

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

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

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

  • 相关阅读:
    BZOJ 1101 莫比乌斯函数+分块
    BZOJ 2045 容斥原理
    BZOJ 4636 (动态开节点)线段树
    BZOJ 2005 容斥原理
    BZOJ 2190 欧拉函数
    BZOJ 2818 欧拉函数
    BZOJ 3123 主席树 启发式合并
    812. Largest Triangle Area
    805. Split Array With Same Average
    794. Valid Tic-Tac-Toe State
  • 原文地址:https://www.cnblogs.com/Lamfai/p/10763334.html
Copyright © 2011-2022 走看看