递归
每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。
递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。
调用栈:用于存储多个函数的变量。
//1.调用greet("sally"),计算机将首先为该函数调用分配一块内存
def greet(name):
//2.此时打印hello,sally!
print "hello, " + name + "!"
//3.此时调用了greet2("sally")
greet2(name)
//7.打印准备说再见啦
print "准备说再见啦..."
//8. 此时调用bye
bye()
//4.进入greet2,同样为它分配一块内存
def greet2(name):
//5.打印 你好吗,sally?
print "你好吗, " + name + "?"
//6.这时greet2函数调用完毕,从栈顶弹出
//9.进入bye,同样为它分配一块内存
def bye():
//10.打印 好的拜拜啦
print "好的拜拜啦!"
//11.这时bye函数调用完毕,从栈顶弹出
//12.最后又回到了函数greet,内部函数已经都调用完毕,故从greet返回。
这里的greet就是调用栈,所有函数调用都进入调用栈。不过调用栈可能很长,会占用大量的内存。
递归调用栈
比如下面用递归写的阶乘函数:
def fact(x): //令 x = 3
if x == 1;
return 1
else:
return x * fact(x-1)
注意,每个fact调用都有自己的x变量。在一个函数调用中不能访问另一个的x变量