Python基础之初识递归
初识递归
递归的定义:
在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。
递归的最大深度--997
递归函数不受外力的阻止会一直执行下去,python为了杜绝此类现象,强制将递归层数控制在997层。
如下为测试python遇到此类情况强制停止的现象
def foo(n):
print(n)
n += 1
foo(n)
FOO(1)
#以上为死循环,python会一直执行997次后便提醒用户
以上手段为python为了让用户程序的内存优化所设定的一个默认值,我们也可以自定义它:
import sys
print(sys.setrecursionlimit(10000))
def foo(n):
print(n)
n += 1
foo(n)
foo(1)
#以上设定的是10000次,但是笔者的电脑只能递归3219次,便停止了,取决于电脑性能。
再谈递归
假设有一个求年龄的需求,大体如下:
现在你们问我,Alex多大了?我说我不告诉你,但Alex比 Egon 大两岁。
你想知道Alex多大,你是不是还得去问Egon?Egon说,我也不告诉你,但我比Eva大两岁。
你又问Eva,Eva也不告诉你,她说她比Jack大两岁。
那你问Jack,Jack告诉你,他40了。。。
通过挨个询问,这时候你已经知道Alex的年龄了。我们具体分析以下,这几个人之间的规律。


像这种情况,我们用函数应该怎么快速的求Alex的年龄呢?
def age(n):
if n == 1:
return 40
else:
return age(n-1)+2 print(age(4))
递归函数与三级菜单
menu = {
'北京': {
'海淀': { },
'昌平': { },
'朝阳': { },
'东城': { },
},
'上海': {
'闵行',
'闸北',
},
}
def threeLM(dic):
while True:
for k in dic:print(k)
key = input('input>>').strip()
if key == 'b' or key == 'q':return key
elif key in dic.keys() and dic[key]:
ret = threeLM(dic[key])
if ret == 'q': return 'q'
elif (not dic.get(key)) or (not dic[key]) :
continue
threeLM(menu)
Python基础之初识递归的更多相关文章
- Python基础(1) - 初识Python
Python 特点: 1)面向对象 2)解释执行 3)跨平台.可移植 4)垃圾回收机制 5)动态数据类型.强类型 6)可扩展.可嵌入 Python可以方便调用C/C++等语言,同时也可以方便的被C/C ...
- python基础之 初识函数&函数进阶
函数基础部分 1.什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名 ...
- python基础之初识python
Python的发展史 1989年圣诞节期间,吉多·范罗苏姆为了打发时间,开发了python这门语言.真他妈牛逼. Python崇尚优美.清晰.简单,是一门优秀并广泛使用的语言.2007年在TIOBE榜 ...
- Python之路【第五篇】python基础 之初识函数(一)和文件管理
转载请注明出处http://www.cnblogs.com/wupeiqi/articles/5453708.html 函数 一.背景 ...
- Python基础(函数-递归)
本章内容: 深浅拷贝 函数(全局与局部变量) 内置函数 文件处理 三元运算 lambda 表达式 递归(斐波那契数列) 冒泡排序 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝 ...
- python基础(初识Python)
python基础(初识Python) 本章内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.pyc文件.脚步传入参数.变量.输入.流程控制与缩进.while循环) ...
- python基础4之递归、lambda、深浅copy
内容概要: 一.递归 二.匿名函数 三.关于python中的深浅拷贝与赋值 一.递归 递归就是函数本身调用自己,直到满足指定条件之后一层层退出函数 递归特性: 必须有一个明确的结束条件 每次进入更深一 ...
- python 基础篇 16 递归和二分数查找与编码补充回顾
编码回顾补充: 回顾编码问题: 编码相当于密码本,关系到二进制与看懂的文字的的对应关系. 最早期的密码本: ascii码:只包含英文字母,数字,特殊字符. ...
- 从入门到自闭之Python基础——函数初识
1. 文件操作: 读操作: 格式:f = open("文件路径",mode = "r",encoding = "utf-8") f : 代表 ...
随机推荐
- POJ 3624.Charm Bracelet-动态规划0-1背包
Charm Bracelet Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 47876 Accepted: 20346 ...
- UVA 624 CD【01背包+路径记录】
You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music is o ...
- Linux的软连接和硬连接
1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索引 ...
- Codeforces 920 E Connected Components?
Discription You are given an undirected graph consisting of n vertices and edges. Instead of giving ...
- JavaScrip book
1.<JavaScript: The Good Parts>中文版:<JavaScript语言精粹>2.<Professional JavaScript for Web ...
- Uri详解之——Uri结构与代码提取
目录(?)[+] 前言:依然没有前言…… 相关博客:1.<Uri详解之——Uri结构与代码提取>2.<Uri详解之二——通过自定义Uri外部启动APP与Notification启动& ...
- [Android Traffic] 让android应用在传输网络数据的时候更省电
到今年6月,我国的手机网民已经达到了3.88亿,超过了电脑终端.相信有智能机的同学都用过手机上网冲浪.但是手机的电量很快被用光了恐怕是每个人都不能忍受的一件事情.而打开数据连接进行网络数据的传输是很耗 ...
- python 文件操作的注意事项
我们经常用python读取文件信息,这里有些注意事项 with open('test.txt', 'r') as f: print 'f.read', f.read() with open('test ...
- EasyUI Tree 动态传递参数
1.问题背景 一般出现在加载的时候,传递参数给后台,进行数据筛选,然后在加载tree渲染数据.所谓动态参数,可以是你的上一级节点node,或者是根节点node. 2.涉及方法 onBeforeLoad ...
- 解決從Ubuntu 12.04升級至12.10之後的Unity顯示問題
FROM: http://blog.sina.com.cn/s/blog_97ef3ff4010190pe.html#bsh-75-306370781 今天中午經過系統自帶的“檢查更新”軟件從Ubun ...