python开发 随笔补充之递归函数与实例

递归函数

递归函数的定义:

  1、一个函数在内部调用自己,这就叫递归函数

  2、递归的层数在python里面是有限制的

  3、必须要有一个结束条件

解耦:

要完成一个完整的功能,但这个功能的规模要尽量小,并且和这个功能无关的其他代码应该和这个函数分离。

  1、增强代码的重要性

  2、减少代码变更的相互影响

 

例一:

现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁。

你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。

你又问武sir,武sir也不告诉你,他说他比金鑫大两岁。

那你问金鑫,金鑫告诉你,他40了。。。

这个时候你是不是就知道了?alex多大?

 

 

 

首先,你是不是问alex的年龄,结果又找到egon、武sir、金鑫,你挨个儿问过去,一直到拿到一个确切的答案,然后顺着这条线再找回来,才得到最终alex的年龄。这个过程已经非常接近递归的思想。我们就来具体的我分析一下,这几个人之间的规律。

4、aelx    46     # egon+2   4   age(4)=age(3)+2   

3、egon   44    #武sir+2         age(3)=age(2)+2

2、武sir    42    # 金鑫+2       age(2)=age(1)+2

1、金鑫     40   #               age(1)==40

def age(n):
    if n == 1:
        return 40
    else:
        return age(n-1)+2

print(age(4)

例二:

二分查找:

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,69,72,76,82,83,88]

def search(num,l,start=None,end=None):
    start = start if start else 0
    end = end if end else len(l)-1
    mid = (end-start)//2+start
    if l[mid] > num:
        search(num,l,start,mid-1)
    elif l[mid] < num:
        search(num,l,mid+1,end)
    elif l[mid] == num:
        print(mid,l[mid])     #print(mid)
search(66,l)

阶乘(没有返回值)

def search(num,l,start=None,end=None):
    start = start if start else 0
    end = end if end len(l)-1
    mid = (end-start)//2+start
    if l[mid] > num:
        return search(num,l,start,mid-1)
    elif l[mid] < num
        return search(num,l,mid+1,end)
    elif l[mid] == num
        return mid
print(search(66,l))

阶乘(有返回值)

例三:

 阶乘:n=7     7*6*5*4*3*2*1

def func(n):
    if n==1:
        return 1
    else:
        return n*func(n-1)
print(func(7))

 

例四:

 三级菜单:

menu = {
    ‘北京‘: {
        ‘海淀‘: {
            ‘五道口‘: {
                ‘soho‘: {},
                ‘网易‘: {},
                ‘google‘: {}
            },
            ‘中关村‘: {
                ‘爱奇艺‘: {},
                ‘汽车之家‘: {},
                ‘youku‘: {},
            },
            ‘上地‘: {
                ‘百度‘: {},
            },
        },
        ‘昌平‘: {
            ‘沙河‘: {
                ‘老男孩‘: {},
                ‘北航‘: {},
            },
            ‘天通苑‘: {},
            ‘回龙观‘: {},
        },
        ‘朝阳‘: {},
        ‘东城‘: {},
    },
    ‘上海‘: {
        ‘闵行‘: {
            "人民广场": {
                ‘炸鸡店‘: {}
            }
        },
        ‘闸北‘: {
            ‘火车战‘: {
                ‘携程‘: {}
            }
        },
        ‘浦东‘: {},
    },
    ‘山东‘: {},
}

def func(menu):
    while True:
        for k in menu:print(k)
        key = input(‘>>>‘)
        elif key ==‘q‘:return ‘q‘
        elif key == ‘b‘:break
            res=func(menu[key])
            if res==‘q‘:return ‘q‘
func(menu)

三级菜单

时间: 2024-08-13 14:19:39

python开发 随笔补充之递归函数与实例的相关文章

python开发函数进阶:递归函数

一,什么叫递归 #递归#在一个函数里调用自己#python递归最大层数限制 997#最大层数限制是python默认的,可以做修改#但是我们不建议你修改 例子和尚讲故事 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #:基础版本 5 def story(): 6 print("从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呀?") 7 while True: 8 story() 9 10 #:递归版本 11 def story

Python开发【第二十二篇】:Web框架之Django【进阶】

Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 新随笔 联系 订阅 管理 随笔-124  文章-127  评论-205 Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻

Window上python开发--4.Django的用户登录模块User

在搭建网站和web的应用程序时,用户的登录和管理是几乎是每个网站都必备的.今天主要从一个实例了解以下django本身自带的user模块.本文并不对user进行扩展. 主要使用原生的模块. 1.User模块基础: 在使用user 之前先import到自己的iew中.相当与我们自己写好的models.只不过这个是系统提供的models. from django.contrib.auth.models import User # 导入user模块 1.1User对象属性 User 对象属性:usern

【python开发教程】如何快速入门python开发?

想要学习python这门语言,却始终找不到一个全面的Python开发实战教程,倘若你是真心想学好一门语言,小编建议你亲自动手实践的.下面来看看入门python的学习教程. Python的语言特性 Python是一门具有强类型(即变量类型是强制要求的).动态性.隐式类型(不需要做变量声明).大小写敏感(var和VAR代表了不同的变量)以及面向对象(一切皆为对象)等特点的编程语言. 获取帮助 你可以很容易的通过Python解释器获取帮助.如果你想知道一个对象(object)是如何工作的,那么你所需要

Python开发教程推荐

简明 Python 教程 http://woodpecker.org.cn/abyteofpython_cn/chinese/index.html python-docx https://python-docx.readthedocs.org/en/latest/ 使用Shell脚本对Linux系统和进程资源进行监控 http://www.csdn.net/article/2012-06-26/2806898 python工具-代码生成器 http://www.cnblogs.com/wdong

Python开发【第二十篇】:缓存

Python开发[第二十篇]:缓存redis&Memcache 点击这里 Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可

Python 开发轻量级爬虫03

Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监视爬虫的运行情况. 在爬虫程序中有三个模块.首先url管理器来对将要爬取的url和已经爬取过的url这两个数据的进行管理. 从url管理器中取出一个待爬取的url将其传送给网页下载器,下载器将指定的网页下载下来存储成一个字符串,这个字符串会传送给网页解析器进行解析, 一方面会解析出有价值的数据,另一

Python 开发轻量级爬虫01

Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访问,有些网页是 使用了Ajax异步加载的内容,这些网页的抓取就会比较复杂. 这里只会考虑不需要登录的静态加载网页的抓取. 课程包含以下内容: 1.爬虫简介 介绍爬虫是什么?它实现了什么功能? 2.简单爬虫架构 介绍简单的爬虫架构,架构中包含了哪些模块,这些模块怎么组装在一起完成整个爬取任务的.但该架

Python 开发轻量级爬虫08

Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓取Python百度百科词条页面以及相关词条页面的标题和简介. 2.分析这个目标,即需要确定抓取这些网站数据的策略. 有三部分需要分析. 1)需要分析这些目标页面的url格式,用来限定我们要抓取页面的范围. 如果这个范围不进行限定的话,我们的爬虫就会抓取互联网上很多不相关的网页,造成资源的浪费. 2)