python 函数的递归

递归:简单来说就是自己调用自己

这里我们又要举个例子来说明递归能做的事情。

例一:

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

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

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

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

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

1 金鑫   40
2 武sir   42
3 egon   44
4 alex    46

你为什么能知道的?

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

age(5) = age(4) + 2age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 40

那这样的情况下,我们的函数应该怎么写呢?

__author__ = ‘Administrator‘
def f(n):
   if n==1:
       return 40
   else:
       ret=f(n-1)+2
       return ret

print(f(5))

‘‘‘
n=5 return f(4)+2=f(3)+4=f(2)+6=f(1)+8
‘‘‘

递归实现二分算法

如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做?

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

1.简单版本

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

def f(l,aim):
    mid=len(l)//2
    if l[mid]>aim:
        return f(l[0:mid],aim)
    elif  l[mid]<aim:
        return f(l[mid+1:],aim)
    else:
        return l[mid]

print(f(l,66))

2.升级版本,找到位置

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

def f(l,aim,start,end):
    mid=(start+end)//2

    if l[mid]>aim:
        return f(l,aim,start,mid-1)
    elif l[mid]<aim:
        return f(l,aim,mid+1,end)
    elif l[mid]==aim:
        return mid
    else:
        print("找不到")

print(f(l,66,0,len(l)-1))

递归函数与三级菜单

menu = {
    ‘北京‘: {
        ‘海淀‘: {
            ‘五道口‘: {
                ‘soho‘: {},
                ‘网易‘: {},
                ‘google‘: {}
            },
            ‘中关村‘: {
                ‘爱奇艺‘: {},
                ‘汽车之家‘: {},
                ‘youku‘: {},
            },
            ‘上地‘: {
                ‘百度‘: {},
            },
        },
        ‘昌平‘: {
            ‘沙河‘: {
                ‘老男孩‘: {},
                ‘北航‘: {},
            },
            ‘天通苑‘: {},
            ‘回龙观‘: {},
        },
        ‘朝阳‘: {},
        ‘东城‘: {},
    },
    ‘云南‘: {
        ‘昆明‘: {
            "官渡区": {
                ‘阿拉村‘:{},
                ‘大板桥‘:{},
                ‘官渡广场‘:{},
                ‘关上‘:{}
            },
            "五华区":{},
            ‘呈贡‘:{}
        },
        ‘曲靖‘: {
            ‘宣威‘: {
                ‘美幻广场‘: {},
                ‘宛水公园‘: {},
                ‘东山‘: {}
            },
             ‘麒麟区‘: {
                ‘麒麟公园‘: {},
                ‘珠江源广场‘: {},
                ‘南城门广场‘: {}
            },
             ‘沾益区‘: {
                ‘玉林山水‘: {},
                ‘小花园‘: {},
            },
        },
        ‘玉溪‘: {
             ‘红塔区‘: {
                ‘红塔集团‘: {},
                ‘聂耳广场‘: {}
            },
             ‘澄江县‘: {
                ‘抚仙湖‘: {},
                ‘黄金海岸‘: {},
            },
             ‘通海县‘: {
                ‘铜锅饭‘: {},
                ‘石锅鱼‘: {},
                }
        },
    },
    ‘山东‘: {},
}

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)

def fun(s):
    while True:
        for k in s:
            print(k)
        dd=input("input>>:").strip()
        if dd in s:
           fun(s[dd])
        elif dd=="back":
            break
fun(menu)

原文地址:https://www.cnblogs.com/Xanderzyl/p/10496341.html

时间: 2024-08-13 15:51:01

python 函数的递归的相关文章

python函数之递归

一.递归的定义 函数的递归就是在一个函数内调用这个函数本身,python默认递归的最大层数是997. 二.递归实现三级菜单 1 def threeLM(dic): 2 while True: 3 for k in dic:print(k) 4 key = input('input>>').strip() 5 if key == 'b' or key == 'q':return key 6 elif key in dic.keys() and dic[key]: 7 ret = threeLM(

Python 函数、递归、内置函数

目录 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 1.函数基本语法及特性 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method. 定

python函数:递归

实现阶乘 方法一:迭代 方法二:递归 递归,就是在运行的过程中调用自己. 构成递归需具备的条件: 1. 子问题须与原始问题为同样的事,且更为简单: 2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理.

python函数 变量 递归 匿名函数 内置函数 文件操作

1 语法 #语法 def 函数名(参数1,参数2,参数3,...): '''注释''' 函数体 return 返回的值 #函数名要能反映其意义 返回值数=0:返回None放回值数=1:返回object放回值数>1:返回tuple 2.定义函数的三种形式 1.无参:应用场景仅仅只是执行一些操作,比如与用户交互,打印2.有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值 3.空函数:设计代码结构 形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,

Python旅途——函数的递归和栈的使用

Python--函数之递归.栈的使用 今天主要和大家分享函数的递归,同时引入一个新的概念--栈 1.递归 1.定义 函数的递归指的就是函数自己调用自己,什么是函数自己调用自己呢?我们来看一个栗子: 这里给大家一个数学中的一个数列:斐波那契数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,它指的是前两项的和等于第三项,那么我们对于这

python函数及函数式编程

函数是对程序逻辑进行结构化或过程化的一种编程方法.函数与过程相比,两者都是可以被调用的实体,但是传统意义上的函数或者"黑盒",可能不带任何输入参数,经过一定的处理,最后向调用者传回返回值,而过程是简单.特殊.没有返回值的函数.其实,python的过程就是函数,因为在函数中如果没有显式return返回值的话,解释器会隐式地返回默认值None. 1.函数定义 def foo([argument-list]): "function_document_string" foo

python之理解——递归

古之欲明明德于天下者,先治其国:欲治其国者,先齐其家:欲齐其家者,先修其身:欲修其身者,先正其心:欲正其心者,先诚其意:欲诚其意者,先致其知,致知在格物.物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平. 这是从林海峰博客里面copy的.很好的解释了,python函数的递归. 那什么是递归? 在函数内部,可以调用其他函数.如果在调用一个函数的过程中直接或间接调用自身本身 def digui(n): print(n) digui(n) digui(

Python基础之内置函数和递归

本文和大家分享的主要是python中内置函数和递归相关内容,一起来看看吧,希望对大家学习python有所帮助. 一.内置函数 下面简单介绍几个: 1.abs() 求绝对值 2.all() 如果 iterable 的所有元素都为真(或者如果可迭代为空),则返回  True 3.any() 如果 iterable 的任何元素为真,则返回  True .如果iterable为空,则返回  False 4.callable() 如果  object 参数出现可调,则返回  True ,否则返回  Fal

python协程函数、递归、匿名函数与内置函数使用、模块与包

目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a.生成器相关python函数.装饰器.迭代器.生成器,我们是如何使用生成器的.一个生成器能暂停执行并返回一个中间的结果这就是 yield 语句的功能 : 返回一个中间值给调用者并暂停执行. 我们的调用方式为yeild 1的方式,此方式又称为生成器的语句形式. 而使用生成器的场景:使用生成器最好的场景就