python--函数思想(递归)

一.解耦

1.解耦的作用:(1)减少代码的重用性(2)减少代码变更的相互影响(3)增强代码的重用性

注意:在后续的学习中应该充分考虑使用解耦的思想

二.递归

1.递归:在函数中调用函数本身(ps:要记住每次传的参数可能是会变化的)

(1)计算阶乘

def func(n):
    if n==1:
        return 1
    else:
        return n*func(n-1)
ret=func(6)
print(ret)
计算6的阶乘

(2)计算斐波那契数列

def fib(n):
    if n==1 or n==2:
        return 1
    return fib(n-1)+fib(n-2)
ret=fib(6)
print(ret)
斐波那契数列

(3)面试真题

有个数据结构如下所⽰,请编写⼀个函数从该结构数据中返回由指定的字段和对应的值组成的字典。如果指定字段不存在,则跳过该字段。(10分)

data={"time":"2016-08-05T13:13:05","some_id":"ID1234","grp1":{ "fld1":1,"fld2":2},"xxx2":{ "fld3":0,fld5":0.4},"fld6":11,"fld7":7,fld46":8}

fields:"|"连接的以"fld"开头的字符串,:fld2|fld3|fld7|fld19

data={"time":"2016-08-05T13:13:05","some_id":"ID1234",
"grp1":{ "fld1":1,"fld2":2},"xxx2":{ "fld3":0,"fld5":0.4},
"fld6":11,"fld7":7,"fld46":8}
fields = 'fld2|fld3|fld7|fld9'
def select(data,fields,result={}):
    fields_lst = fields.split('|')
    for i in data:
        if i in fields_lst:
            result[i]=data[i]
        if type(data[i])==dict:
            select(data[i],fields)
    return result
ret=select(data,fields)
print(ret)
面试题

(4)三级菜单

menu = {'江西':{'宜春':{'丰城':{}},'九江':{'修水':{}},'南昌':{'新建':{}}},
        '湖南':{'湘潭':{'湘乡':{}},'长沙':{'芙蓉':{}},'岳阳':{'平江':{}}},
        '湖北':{'武汉':{'武昌':{}},'荆州':{'江陵':{}},'宜昌':{'襄阳':{}}}}
#
def func(menu):
    while True:
        for key in menu:
            print(key)
        name=input('>>>')
        if name=='q':
            return 'q'
        elif name=='b':
            break
        elif name in menu:
           ret=func(menu[name])
           if ret=='q':
               return 'q'
func(menu)
三级菜单

 

posted @ 2017-09-07 19:36  明-少  阅读(390)  评论(0)    收藏  举报