python函数递归年龄,python之函数递归

函数递归调用

在函数内部,可以调用其它函数,如果一个函数在内部调用自身,即是递归调用

为防止无限递归类似于死循环,需要如下:

1、必须要有一个明确的返回值;

2、每次进入更深一层递归时,问题规模应该比上次递归都有所减少;

3、递归效率不高,当层次过多会导致栈溢出

例如:

def calc(n):

print(n)

if int(n/2) == 0:

return n

res=calc(int(n/2))

return res

v=calc(10)

print(v)

返回结果:

10

5

2

1

1

程序执行过程:

388c9275807dd1c4877756720e70bd38.png

调用calc()函数,传入参数10;calc()函数第一次执行;

进入calc函数,打印10

判断不满足

再次调用calc函数传入参数5,calc()函数第二次执行;

此时第一次calc函数在等待第二次calc函数的返回结果赋值给res

第二次calc函数执行:

打印5

判断不满足

执行第三次calc函数,传入参数2,calc()函数第三次执行;

此时第二次calc函数在等待第三次calc函数的返回结果赋值给res

第三次calc函数执行:

打印2

判断不满足

执行第四次calc函数,传参数1,calc()函数第四次执行;

此时第三次calc函数在等待第四次calc函数的返回结果赋值给res

第四次calc函数执行:

打印1

判断成立,执行return 1

第四次calc函数执行完毕,把1返回给第三次calc函数

第三次calc函数在等待第四次函数的返回结果;

第四次calc函数返回了1

第三次calc函数拿到结果后赋值给res;

第三次calc函数执行return 1返回给第发给次函数************************

第二次calc函数在等待第三次函数的返回结果;

第三次calc函数返回了1

第二次calc函数把1赋值给res

第二次calc函数执行return 1返回给第一次函数

************************

第一次calc函数在等待第二次函数的返回结果;

第二次calc函数返回了1

第一次calc函数把1赋值给rest

第一次calc函数执行return 1返回给调用它的程序

************************

2887eb07c22ad583291399dc3fced715.png

程序接收到了结果1赋值给变量v

最后打印变量

#递归实例:问路

问路最终分为2种情况:

- 问到最后没人知道;

- 问到某个人时知道;

- 现在假设有个人物列表代表问路时需要问的人

- 假设问到最后Tom知道路

person_list=["zhangsan","lisi","Tom"] #路人列表,需要被问到的人

def find_way():

if len(person_list) == 0:

return "No one know the way" #问到最后没人知道

person=person_list.pop(0) #依次弹出1个人去问

if person == "Tom": #只有Tom才知道,弹出的人不是Tom,表示不知道,需要问下一个人

return "%s said:I know the way,over there" %person

res=find_way()

return res

v=find_way()

print(v)

返回结果:

Tom said:I know the way,over there

python基础-函数递归

函数递归 概念:直接或间接地重复调用函数本身,是一种函数嵌套调用的表现形式. 直接调用:在函数内部,直接调用函数本身 def foo(): print("这是foo函数") foo ...

(十七)python 3 函数递归

递归函数 即自己调用自己,递归中可以函数自身调用自身,但是使用时类似于条件循环一样,要有递归的终止条件 优点:使用递归时,常常可以让代码更加简洁 缺点:递归会占用比较多的内存,当递归次数比较多时,性能 ...

python 关于函数递归调用自己

爬取b站博人传 每页短评20个,页数超过1000页, 代码如下 import requests import json import csv def main(start_url): headers ...

python全栈开发-Day12 三元表达式、函数递归、匿名函数、内置函数

一. 三元表达式 一 .三元表达式 仅应用于: 1.条件成立返回,一个值 2.条件不成立返回 ,一个值 def max2(x,y): #普通函数定义 if x > y: return x els ...

Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数

三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...

Python之路Python全局变量与局部变量、函数多层嵌套、函数递归

Python之路Python全局变量与局部变量.函数多层嵌套.函数递归 一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局 ...

python 之 函数 面向过程 三元表达式 函数递归

5.11 面向过程编程思想 核心是'过程'二字,过程即解决问题的步骤,即先干什么,再干什么........ 基于面向过程编写程序就好比在设计一条流水线,是一种机械式的思维方式. 总结优缺点: 优点:复 ...

随机推荐

HSSFWorkBooK用法

public ActionResult excelPrint() { HSSFWorkbook workbook = new HSSFWorkbook();// 创建一个Excel文件 HSSFShe ...

信鸽推送(XGPush)

先放入两个链接: iOS信鸽接入官方文档:http://developer.qq.com/wiki/xg/iOS接入/iOS%20SDK完整接入/iOS%20SDK完整接入.html 信鸽开放平台:h ...

Android ImageView的scaleType属性与adjustViewBounds属性(转载)

ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

<转>如何改变讨好型人格 | 你根本不需要讨好任何人

在我过去二十多年的生命里一直是一个“讨好者”. 我总是活在别人对我的期待中,我总是不停的追逐着别人对我的认可,我总是像个卑微的奴才一样去满足别人的需求. 但就和大多数的“讨好者”一样,我们越是寻求别人 ...

HDU 5038 Grade(分级)

Description 题目描述 Ted is a employee of Always Cook Mushroom (ACM). His boss Matt gives him a pack of ...

Java jdk环境变量配置

首先安装jdk,现在已经是jdk 8了,也不知道能不能好好用了...

Transaction的理解

Transaction的理解   待完善......

swift 学习线路

//从(GCD,动画,通知,KVO..) 到闭包 到单子 再到 promise ,再到 reactive //从可选类型 到可选绑定 ,隐私可选解包 ,动态绑定,nil 聚合运算符 再到可选链 再到S ...

Oracle 11g RAC使用Manual和Policy Managed方法配置(转)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值