一、局部变量与全局变量

定义全局变量: 顶格定义,没有缩进,全局都可以使用。
定义局部变量:在函数内部定义的变量,只能在函数内使用,超出所属该函数外不可调用。

在函数内部定义的变量与全局变量重名时,在函数内部调用变量则优先修改函数内部的局部变量,不更改全局变量。要是有同学说我一定要在函数内部修改全局变量怎么办?使用global关键字+变量名即可。
如果函数的内容无global关键字,优先读取局部变量,并且只能读取全局变量,而不能对全局变量进行修改,当函数中有global关键字以后,变量本质上变成了全局变量,可读取,可赋值。上一级变量代指关键字nonlocal。
注意:函数也可以当作是一个变量,也要遵从定义,在使用!一定要先定义再使用!因为只有定义后才会开辟内存空间放置函数的内容,否则先使用会直接找不到该名字指向的内存空间,直接报错!

二、递归

  1. 所谓递归,就是函数自己调用自己,得到最终结果后沿原路返回结果,符合递和归这两个字的单独含义,先递,前往传递需要计算的内容等,得到结果后,再往回归,所以这就是递归。
    注意:函数调用自己如果没有结束条件,会无限循环下去,把栈挤爆掉,导致程序崩溃,所以当我们使用递归时,一定要加结束条件,让函数有结束的时候,就像死循环中一般都要加条件使其break一样的道理。
  2. 递归每次进入更深一层时,问题规模相比上次递归都应有所减少。
  3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈这种数据结构实现的,每当进入一个函数调用,栈就会增加一层,每当函数返回时,栈就会减少一层,由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈的溢出)。
    简单的递归示例:
def calc(n) :
	print(n)
	if int(n / 2) == 0
		return n
	return calc(int(n / 2))

calc(10)
#输出结果为: 10   5   2   1