zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    jqeuery $.ajax 与后台jsone交互
    SpringMVC3.2+JPA使用注解的方式环境搭建
    SpringMVC+JPA使用注入的方式环境搭建
    EasyUI_tree根据数据库数据生成树形结构JSON格式
    ACM竞赛高手比其他程序员水平高很多吗?
    hdu 1028 Ignatius and the Princess III(DP)
    9513 防空洞
    hdu 1398 Square Coins(简单dp)
    FZU 1608 Huge Mission(线段树)
    poj2528 Mayor's posters(线段树之成段更新)
  • 原文地址:https://www.cnblogs.com/bingpan/p/7265427.html
Copyright © 2011-2022 走看看