初识递归

递归的定义:

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

递归的最大深度--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基础之初识递归的更多相关文章

  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. java copy array

    13down voteaccepted Here's a java 1.4 compatible 1.5-liner: int[] array = { 1, 2, 3, 4, 5 }; int siz ...

  2. 【BZOJ2276】Temperature

    题面 Description The Byteotian Institute of Meteorology (BIM) measures the air temperature daily. The ...

  3. dubbo的中文官网

    https://dubbo.gitbooks.io/dubbo-user-book/content/preface/background.html

  4. 【OpenJudge7624】【区间DP】山区建小学

    山区建小学 总时间限制: 1000ms 内存限制: 65536kB [描述] 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两 ...

  5. 图文介绍openLDAP在windows上的安装配置

    目录 概述 测试环境 安装过程 配置启动 客户端介绍 多级DC的ldif文件的配置 [一].概述 什么叫LDAP呢,概念的东西这里就不多讲了,网上搜索下有很多,本文的重点是介绍如何在windows平台 ...

  6. 什么是ISP,他的工作原理是怎样的?

    ISP是Image Signal Processor的缩写,全称是影像处理器.在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始信号数据,可以理解为整个相机拍照.录像的第一步处理流程,对 ...

  7. ES6中的迭代器(Iterator)和生成器(Generator)(二)

    一.内建迭代器 迭代器是ES6的一个重要组成部分,在ES6中,已经默认为许多内建类型提供了内建迭代器,只有当这些内建迭代器无法实现目标时才需要自己创建.通常来说当定义自己的对象和类时才会遇到这种情况, ...

  8. leetcode题解:Valid Palindrome(判断回文)

    题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig ...

  9. log4j教程 12、日志记录到数据库

    log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库. JDBCAppender 配置: Property 描述 buff ...

  10. Linux expect 用法

    expect是建立在tcl基础上的一个工具,它用来让一些需要交互的任务自动化地完成. 因为expect是基于tcl的,所以需要你的系统中安装有tcl 检查是否安装tcl,expect [root@ma ...