常理推断,特别是解释型语言,当程序执行函数内部的语句时,
这个函数还没有定义完,没定义完怎么可以调用本身呢。
但实质上,当你执行函数内部的语句时,
一定有函数外部的语句调用了这个函数,
此时该函数的所有代码和语句,已经在内存中形成了逻辑,
这就是递归函数的原理。
首先将一个既定规则进行数学函数定义 之后直接进行函数调用即可
函数嵌套是调用其他函数 但是递归函数是调用自身函数 即数学函数定义
#函数规则 阶乘的规律 n! = n × (n-1)!
def sumAll(num):
if num>=1:
result=num * sumAll(num-1)
else:
result=1
return result
ret=sumAll(10)
print(ret)
#f(n) = (f(n-1) + 1)*2 在函数外部定义的规则直接进行自身调用即可
def f(n):
if n==1:
return 1
else:
return (f(n-1)+1)*2
print(f(10))
#分解质因数 分解到不能分解的数字 定义函数名称为defactor 用来返回N的所有因子
def defactor(N):
for iin range(2,N):
#从2开始尝试 如果试到i是N的因子则返回i的所有因子和N/i的所有因子的列表
if N % i ==0:
return defactor(i)+defactor(int(N/i))
else:
#如果没有试到就说明N是一个质数,就直接包含他的列表
return [N]
print(defactor(980))
匿名函数
#普通函数求多个数值的和
def sum(a,b,c,d):
return a+b+c+d
print(sum(1,2,3,4))
'''
lambda函数求多个数值的和
lambda表达式冒号前面本身是函数参数
冒号后面是接收表达式即为返回值
'''
a=lambda a,b,c,d:a+b+c+d
print(a(1,2,3,4))
匿名函数 lambda 得益于省略了定义def函数的步骤
sum=lambda a,b : a+b
print(sum(10,20))
#匿名函数可以接收任意数量的参数只能返回一个表达式的值
#匿名函数不能直接调用print 因为lambda需要一个表达式
函数作为参数进行传递
def fun(a,b,opt):
print(a,b,opt(a,b))
fun(1,2,lambda x,y:x+y)
#无参匿名函数
def ttt():
return True
print(ttt())
a=lambda:True
print(a())
#首先用split将字符串转化为列表 然后用''.join()进行分隔开
s='this is \n a \t test'
print(' '.join(s.split()))
#匿名函数来处理有空格的字符串
s1=lambda s:' '.join(s.split())
print(s1('this is \n a \t test'))
#有参数的匿名函数
def sum(a,b,c):
print(a+b+c)
sum(1,2,3)
aa=lambda a,b,c:a+b+c
print(aa(1,2,3))
网友评论