函数递归调用

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

为防止无限递归类似于死循环,需要如下:
  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

程序执行过程:

  

  调用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返回给调用它的程序
************************

  
程序接收到了结果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之函数递归的更多相关文章

  1. python基础-函数递归

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

  2. (十七)python 3 函数递归

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

  3. python 关于函数递归调用自己

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

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

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

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

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

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

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

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

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

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

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

  9. python day-15 匿名函数 sorted ()函数 filter()函数 map()函数 递归 二分法

    一.匿名函数 匿名函数的结构:变量   =  lamda  参数: 返回值 a  =  lamda  x : x*x       # x为参数,   : 后边的为函数体 print(a(x)) def ...

随机推荐

  1. HTML5 新的 Input 类型

    Input 类型: color(拾色器) color 类型用在input字段主要用于选取颜色,如下所示: 支持浏览器 实例 从拾色器中选择一个颜色: 选择你喜欢的颜色: <input type= ...

  2. python 多线程threading的学习一

    1. import threading #引入线程模块 2 申明实例 t = threading.Thread(target  = fun, args = (,)) 说明:参数target 是要运行的 ...

  3. leetcode 921. 使括号有效的最少添加(Python)

    class Solution: def minAddToMakeValid(self, S): """ :type S: str :rtype: int "&q ...

  4. 20175236 2018-2019-2 《Java程序设计》第六周学习总结

    教材学习内容总结 第七章 try :用于监听.将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出. catch:用于捕获异常.catch用来捕获try ...

  5. 解决logging模块日志信息重复问题

    解决logging模块日志信息重复问题 问题描述 相信大家都知道python的logging模块记录日志信息的步骤: # coding:utf-8 import logging ### 创建logge ...

  6. Notification之适配总结

    11. android通知栏8.0系统报错误: NotificationService: No Channel found for pkg=xxx.xxx.xxx, channelId=12345, ...

  7. 权限模型AGDLP

    关于权限模型,认真学习下AD+FS应用在企业中,使用AGDLP模型,即可. AD是微软最牛逼的设计之一.

  8. 安卓ndk 忽略 error: undefined reference to '找不到符号

    最近在搞天使之翼的mrp模拟器... 移到AndroidStudio了,现在想把原来的Android .mk那种方式的改成cmake的方式编译,但是编译时有一些符号找不到. undefined ref ...

  9. jQuery人民币转大写,C#人命币转大写

    jQuery人民币转大写 function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁', '肆 ...

  10. uva-757-贪心

    题意:有个人要去湖里钓鱼,总共有N个湖,排成一个序列,用字母P表示湖,从湖pi 到 pi+1(下一个湖)需要ti个五分钟. 并且,每个湖里可钓出来的鱼每过五分钟就减少di.如果产出的鱼小于等于di.那 ...