函数递归、内置函数

1 什么是函数递归
函数递归调用(是一种特殊的嵌套调用):在调用一个函数的过程中,又直接或间接地调用了该函数本身

递归必须要有两个明确的阶段:
递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须有所减少
回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推
开始一层一层回溯

递归的精髓在于通过不断地重复逼近一个最终的结果

2、为什么要用函数递归


3、如何用

import sys
sys.getrecursionlimit()
sys.setrecursionlimit(2000)

def f1(n):
    print('from f1',n)
    f1(n+1)
f1(1)

 

# 间接调用
# def bar():
# print('from bar')
# foo()
#
# def foo():
# print('from foo')
# bar()
#
# foo()

# 递归分为两个阶段
#1、回溯:
# 注意:一定要在满足某种条件结束回溯,否则的无限递归
#2、递推

# 总结:
#1、递归一定要有一个明确地结束条件
#2、没进入下一次递归,问题的规模都应该减少
#3、在python中没有尾递归优化

内置函数:

print(abs(-1))
print(all([1,'a',True])) # 列表中所有元素的布尔值为真,最终结果才为真
print(all('')) # 传给all的可迭代对象如果为空,最终结果为真

print(any([0,'',None,False])) #列表中所有元素的布尔值只要有一个为真,最终结果就为真
print(any([])) # 传给any的可迭代对象如果为空,最终结果为假

print(bin(11)) #十进制转二进制
print(oct(11)) #十进制转八进制
print(hex(11)) #十进制转十六进制

print(bool(0)) #0,None,空的布尔值为假

res='你好egon'.encode('utf-8') # unicode按照utf-8进行编码,得到的结果为bytes类型
res=bytes('你好egon',encoding='utf-8') # 同上
print(res)

def func():
pass
print(callable('aaaa'.strip)) #判断某个对象是否是可以调用的,可调用指的是可以加括号执行某个功能

print(chr(90)) #按照ascii码表将十进制数字转成字符
print(ord('Z')) #按照ascii码表将字符转成十进制数字


print(dir('abc')) # 查看某个对象下可以用通过点调用到哪些方法

print(divmod(1311,25)) # 1311 25

将字符内的表达式拿出运行一下,并拿到该表达式的执行结果
res=eval('2*3')
res=eval('[1,2,3,4]')
res=eval('{"name":"egon","age":18}')
print(res,type(res))

with open('db.txt','r',encoding='utf-8') as f:
s=f.read()
dic=eval(s)
print(dic,type(dic))
print(dic['egon'])


s={1,2,3}
s.add(4)
print(s)

不可变集合
fset=frozenset({1,2,3})

x=111111111111111111111111111111111111111111111111111111111111111111111111111111111111
# print(globals()) # 查看全局作用域中的名字与值的绑定关系
# print(dir(globals()['__builtins__']))
def func():
x=1
print(locals())
# func()
print(globals())

字典的key必须是不可变类型
dic={[1,2,3]:'a'}
不可hash的类型list,dict,set== 可变的类型
可hash的类型int,float,str,tuple == 不可变的类型
hash()
原文地址:https://www.cnblogs.com/wangcheng9418/p/9183187.html