初识递归

递归的定义:

在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。

递归的最大深度--997

递归函数不受外力的阻止会一直执行下去,python为了杜绝此类现象,强制将递归层数控制在997层。

如下为测试python遇到此类情况强制停止的现象

  1. def foo(n):
  2. print(n)
  3. n += 1
  4. foo(n)
  5. FOO(1)
    #以上为死循环,python会一直执行997次后便提醒用户

以上手段为python为了让用户程序的内存优化所设定的一个默认值,我们也可以自定义它:

  1. import sys
  2. print(sys.setrecursionlimit(10000))
  3. def foo(n):
  4. print(n)
  5. n += 1
  6. foo(n)
  7. foo(1)
  8. #以上设定的是10000次,但是笔者的电脑只能递归3219次,便停止了,取决于电脑性能。

再谈递归

假设有一个求年龄的需求,大体如下:

现在你们问我,Alex多大了?我说我不告诉你,但Alex比 Egon 大两岁。

你想知道Alex多大,你是不是还得去问Egon?Egon说,我也不告诉你,但我比Eva大两岁。

你又问Eva,Eva也不告诉你,她说她比Jack大两岁。

那你问Jack,Jack告诉你,他40了。。。

通过挨个询问,这时候你已经知道Alex的年龄了。我们具体分析以下,这几个人之间的规律。

像这种情况,我们用函数应该怎么快速的求Alex的年龄呢?

  1. def age(n):
  2. if n == 1:
  3. return 40
  4. else:
  5. return age(n-1)+2
  6.  
  7. print(age(4))

递归函数与三级菜单

  1. menu = {
  2. '北京': {
  3. '海淀': { },
  4. '昌平': { },
  5. '朝阳': { },
  6. '东城': { },
  7. },
  8. '上海': {
  9. '闵行',
  10. '闸北',
  11. },
  12. }
  13.  
  14. def threeLM(dic):
  15. while True:
  16. for k in dic:print(k)
  17. key = input('input>>').strip()
  18. if key == 'b' or key == 'q':return key
  19. elif key in dic.keys() and dic[key]:
  20. ret = threeLM(dic[key])
  21. if ret == 'q': return 'q'
  22. elif (not dic.get(key)) or (not dic[key]) :
  23. continue
  24.  
  25. threeLM(menu)

Python基础之初识递归的更多相关文章

  1. Python基础(1) - 初识Python

    Python 特点: 1)面向对象 2)解释执行 3)跨平台.可移植 4)垃圾回收机制 5)动态数据类型.强类型 6)可扩展.可嵌入 Python可以方便调用C/C++等语言,同时也可以方便的被C/C ...

  2. python基础之 初识函数&函数进阶

    函数基础部分 1.什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名 ...

  3. python基础之初识python

    Python的发展史 1989年圣诞节期间,吉多·范罗苏姆为了打发时间,开发了python这门语言.真他妈牛逼. Python崇尚优美.清晰.简单,是一门优秀并广泛使用的语言.2007年在TIOBE榜 ...

  4. Python之路【第五篇】python基础 之初识函数(一)和文件管理

    转载请注明出处http://www.cnblogs.com/wupeiqi/articles/5453708.html 函数 一.背景                                 ...

  5. Python基础(函数-递归)

    本章内容: 深浅拷贝 函数(全局与局部变量) 内置函数 文件处理 三元运算 lambda 表达式 递归(斐波那契数列) 冒泡排序 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝 ...

  6. python基础(初识Python)

    python基础(初识Python) 本章内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.pyc文件.脚步传入参数.变量.输入.流程控制与缩进.while循环) ...

  7. python基础4之递归、lambda、深浅copy

    内容概要: 一.递归 二.匿名函数 三.关于python中的深浅拷贝与赋值 一.递归 递归就是函数本身调用自己,直到满足指定条件之后一层层退出函数 递归特性: 必须有一个明确的结束条件 每次进入更深一 ...

  8. python 基础篇 16 递归和二分数查找与编码补充回顾

    编码回顾补充: 回顾编码问题:        编码相当于密码本,关系到二进制与看懂的文字的的对应关系.    最早期的密码本:        ascii码:只包含英文字母,数字,特殊字符.       ...

  9. 从入门到自闭之Python基础——函数初识

    1. 文件操作: 读操作: 格式:f = open("文件路径",mode = "r",encoding = "utf-8") f : 代表 ...

随机推荐

  1. 如何打造属于自己的Javascript武器库(封装方法)

    前言 代码写的久了,就会发现很多时候都是在写一些重复的东西,这个时候就应该要考虑到提高工作效率了,比如对常用方法的封装,例如日期格式化,浏览器类型判断等. 今天这篇文章我们就来看看如何封装常用的Jav ...

  2. 洛谷 P1064 金明的预算方案【DP/01背包-方案数】

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...

  3. bean装配--auto

    1,Dao package com.songyan.autoZhuangpei; public interface UserDao { public void say(); } package com ...

  4. Enum枚举类使用集合

    1.使用扩展方法使用枚举值对于的Description属性值 public static class EnumExtenstion { public static string GetDescript ...

  5. POJ 3486 & HDU 1913 Computers(dp)

    题目链接:PKU:HDU: PKU:http://poj.org/problem?id=3486 HDU:pid=1913" target="_blank">htt ...

  6. Apache Beam WordCount编程实战及源代码解读

    概述:Apache Beam WordCount编程实战及源代码解读,并通过intellij IDEA和terminal两种方式调试执行WordCount程序,Apache Beam对大数据的批处理和 ...

  7. 解决svn锁定

    问题:今天去公司 svn-update的时候,报错svn:E155004,提示说什么locked 解决:svn cleanup解除锁定,然后就可以操作了. 原因:SVN 本地更新时,由于一些操作中断更 ...

  8. 【Hadoop】如何形象描述大数据生态?

    作者:千岁大王链接:https://www.zhihu.com/question/27974418/answer/39845635来源:知乎著作权归作者所有,转载请联系作者获得授权. Google内部 ...

  9. ASP.NET MVC学习---(四)MVC初窥

    前面三篇大幅度的介绍了EF框架 这并不是没有道理的 现在使用mvc开发一般都离不开ef 因为它们相结合可以为你带来完美的体验 当然 前面所描述的仅仅是ef框架的冰山一角 它是一门学问很深的功课 如果你 ...

  10. NYOJ 49 开心的小明(01背包问题)

    时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 小明今天非常开心.家里购置的新房就要领钥匙了,新房里有一间他自己专用的非常宽敞的房间.更让他高兴的是.妈妈昨天对他说: ...