回调函数
一个函数中的参数是另一个函数的名字。
#回调函数
i=10;
j=20;
def myfunc(i,j,f):
return f(i,j);
def sum(a,b):
return '{}+{}={}'.format(a,b,a+b);
print(myfunc(i,j,sum));
注:f参数将来会是sum函数的名字,f被称之为回调参数、sum被称之为回调函数。
运行结果:
10+20=30
[Finished in 0.1s]
递归函数
函数体内调用本函数。
a函数调用a函数
递归函数不能写成死循环,如果写成死循环则很容易引起内存溢出。
统计目录大小
一定要善于使用草图来完成程序的设计
#递归函数
num=3;
def myfunc(n):
print(n);
myfunc(n-1);
print(n);
myfunc(num);
运行结果:
[Finished in 0.1s]
注:结果为什么是3/2/1 1/2/3
为什么是3、2、1和1、2、3?
首先,程序的执行是自上而下、自左至右的。
下图是递归函数的草图,
第一次执行时,输出两个3,由于满足if条件,到myfunc时,继续执行myfunc2,所以第一次没有输出两个3。
第二次执行时,输出两个2,由于满足if条件,到myfunc时,继续执行myfunc1,所以第二次没有输出两个2。
第三次执行时,输出两个1,由于不满足if条件,到myfunc时,该函数结束执行,此时输出两个1。
综上所述,第一次输出两个3、第二次输出两个2、第三次输出两个1,但是程序的执行是自上而下、自左至右的。所以最后输出的结果是我们看到的3、2、1和1、2、3。
不知道大家明白没有?
递归草图
myfunc(3){
print(3);
myfunc(2){
print(2);
myfunc(1){
print(1);
print(1);
}
print(2);
}
print(3);
}
递归函数的应用
使用递归函数完成数字累加之和。
#递归函数
num=10;
def myfunc(n):
return n+myfunc(n-1);
else:
return 1;
print(myfunc(num));
# 递归草图
# myfunc(3):
# return 3+myfunc(2){
# return 2+myfunc(1){
# return 1;
# }
# }
# }
#
#
# def myfunc(n):
# if n>1:
# return n+myfunc(n-1);
# else:
# return 1;
运行结果:
55
[Finished in 0.1s]
原因如下:
最后第一次返回的3+第二次返回的3+第三次不满足条件返回的1=6
感谢阅读,欢迎在评论区中发表自己不同的观点,若有其他问题请在评论区留言,喜欢的朋友请多多关注转发支持一下。 企鹅号:袁尚 ---------END---------
领取专属 10元无门槛券
私享最新 技术干货