1.globals,locals函数
- 可以通过globals和locals显示出全局变量和局部变量
2.eval()函数
-
把一个字符串当做一个表达式来执行,返回表达式执行后的结果
语法:eval(string_code,globals=None,locals=None)
exec()函数
-
与eval功能类似,但是不返回结果
语法:exec(string_code,globals=None,locals=None
3.递归函数
- 函数直接或者间接调用自身
- 优点:简洁,容易理解
- 缺点:对递归深度有限制,超过限制报错
- 在写递归程序的时候,一定注意结束条件
菲波那切数列
- 一列数字,第一个是1,第二个是1,从第三个开始,每个数字的值等于前两个数字的和
- 数学公式为:f(1) = 1,f(2) = 1,f(n) = f(n-1) + f(n-2)
- 例如:1,1,2,3,5,8,13,21…
def fib(n):
if n == 1:
return 1
if n == 2:
return 1
return fib(n-1)+fib(n-2)
汉诺塔问题
- 规则: 1.每次移动一个盘子 2.任何时候大盘子都必须在小盘子下面 3.有3个塔A,B,C.将开始都在A塔上的盘子通过移动,全部移到C塔上,即算成功
方法:
1.n = 1:直接把A上的一个盘子移到C上,A- ->C
2.n = 2:
a.把小盘子从A放到B上,A- ->B
b.把大盘子从A放到C上,A- ->C
c.把小盘子从B放到C上,B- ->C
3.n = 3:
a.把A上的两个盘子,通过C放到B上,调用递归实现
b.把A剩下的最大的盘子移到C上,A- ->C
c.把B上两个盘子,借助于A移到C上,调用递归实现
4.n = n:
a.把A上的n-1个盘子,通过C放到B上,调用递归实现
b.把A剩下的最大的盘子移到C上,A- ->C
c.把B上n-1盘子,借助于A移到C上,调用递归实现
def hannuo(n,a,b,c):
'''
n:表示有n个盘子
a:代表第一个塔,开始的塔
b:代表第二个塔,过渡塔
c:代表第三个塔,目标塔
d.在代码中n = 2,这个分支可以不要,但这样便于理解
'''
if n == 1:
print(a,"- ->",c)
return None
if n == 2:
print(a,"- ->",b)
print(a,"- ->",c)
print(b,"- ->",c)
return None
hannuo(n-1,a,c,b)
print(a,"- ->",c)
hannuo(n-1,b,a,c)
return None
4.return 的简要使用说明
(1)返回函数的返回值
(2)终止程序的运行,提前退出,