一、前向引用
def foo():
print('from foo')
bar()
foo() #name 'bar' is not defined
def bar():
print('from bar')
在定义foo()函数之后bar()函数定义之前会报错,因为调用foo()函数的时候bar还未定义。
def foo():
print('from foo')
bar()
def bar():
print('from bar')
foo()
在定义foo()和bar()之后调用foo(),虽然foo()定义在bar()之前,且调用了bar(),但是在python中,若不执行函数,函数并不会执行,且在调用之前已经定义了bar(),所以不会报错,这就是前向引用。
二、递归
在函数中调用自身的方式叫做递归。
递归特性:
1.必须有一个明确的结束条件
2.每次进入更深一层递归的时候,问题规模相比于上次递归都应有所减少。
3.递归效率不高,递归层数过多会导致溢出(在计算机中,函数调用时通过栈实现的,每进入一个函数调用,栈就会再加一层,每当函数返回或结束,栈就会减少一层,由于栈的