CSDN话题挑战赛第2期
参赛话题:学习笔记
变量的作用域
- 变量的作用域
- 程序代码能访问该变量的区域
- 根据变量的有效范围可分为
- 局部变量
- 在函数内定义并使用的变量,只在函数内部有效,局部变量使用 global 声明,这个变量就会成为全局变量
- 全局变量
- 函数体外定义的变量,可作用于函数内外
- 局部变量
def fun(a, b):
c = a + b # c就是局部变量,是在函数体内进行定义的变量, a,b为函数的形参,作用范围也是函数内部,相当于局部变量
print(c)
# print(a) # NameError: name 'a' is not defined
# print(c) # NameError: name 'c' is not defined
name = 'zane' # name的作用范围为函数内部和外部都可以使用 --> 称为全局变量
def fun2():
print(name)
fun2() # zane
def fun3():
global age # 函数内部定义的变量,局部变量,局部变量使用了global声明,这个变量实际上就变成了全局变量
age = 20
print(age)
fun3()
print(age)
递归函数
在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数
- 组成
- 递归调用与递归终止条件(否则没完没了没意义)
- 因此语法结构核心是if … else…
- 调用过程
- 每递归调用一次函数,都会在栈内存中分配一个栈帧
- 每执行完一次函数,都会释放相应的空间
- 优缺点
- 思路和代码简单
- 占用内存多(每掉一次都会开相应的内存空间),效率低下
使用递归来计算阶乘(找到出口)
def fac(n):
if n == 1:
return 1
else:
# return n*fac(n-1)
res = n * fac(n - 1)
return res
print(fac(6)) # 720
斐波那契数列 1 1 2 3 5 …
def fib(n):
if n == 1:
return 1
elif n == 2:
return 1
else:
return fib(n - 1) + fib(n - 2)
# 斐波拉契数列第6位上的数字
print(fib(6))
print('----------------')
# 输出前6位数字,重复的过程,我们使用列表,range(1, 7)产生一个 1 到 6 的整数序列即可
for i in range(1, 7):
print(fib(i))