首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python-回调函数和递归函数

回调函数

一个函数中的参数是另一个函数的名字。

#回调函数

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---------

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190119A05K0B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券