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)
递归指的是调用自己的函数。
每个递归函数都有两个条件“基线条件和递归条件。
栈由两种操作:压入和弹出。
所有函数调用都进入调用栈。
调用栈可能很长,这将占用大量的内存。