面向函数编程

def func():
    print('从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呀?')
 func()

解耦:尽量把不相关的功能拆开,用的时候再调用函数,增强代码重用性,减少代码变更的相互影响
要完成一个完整的功能,但这个功能的规模要尽量小,并且和这个功能无关的其他代码应该和这个函数
分离
recursion 递归

什么是递归:

一个函数在内部调用了自己本身

def func():
    print('从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呀?')
 func()
 print('123')

这里面的123永远不会打印,永远都在执行下一个func()
import sys 和python解释器相关的模块
递归层数在python中最大997。可以改限制。

import sys

sys.setrecursionlimit(1000000)  # 修改最大范围 ---但是 python 自己会根据计算机性能停止

count=0
def func():
    global count
    count+=1
    print(count)
    func()
func()

 

递归实例:
写递归函数,必须要有一个结束条件
alex比egon大两岁      alex=egon+2
egon比wusir大两岁     egon=wusir+2
wusir比金鑫大两岁     wusir=金鑫+2
金鑫40了              金鑫40

推测的过程是递,后面计算是归

def age(n):
    if n ==4:
        return 40
    return age(n+1)+2
f = age(1)
print(f)

根据线索向下是递,拿到一个结果再向上是归

递归方法求阶乘:

def jie(n):
     return jie(n-1)*n

print(jie(7))

 

二分查找

l=[1,5,6,7,8,9,25,26,78,123,456,789,1233,7899,8521,9635,10255]
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 start>end:
    return None
    if l[mid]>num:
        return search(num,l,0,mid-1)
    if l[mid]<num:
        return search(num,l,mid+1,end)
    if l[mid]==num:
        return mid,l[mid]
print(search(78,l))

无序的先用.sort()排序

斐波那契数列递归

 

li=[1,1]
def fib(n):
    if n>len(li):
        li.append(li[-2]+li[-1])
        fib(n)
    return li
n = input('请输入要计算的数字个数:')
n = int(n)
ret = fib(n)
print(ret)

面试真题递归

 

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}
def select(data,fields):
    li=fields.split('|')
    for item in data:
            if item in li:
                print(item,data[item])
            elif type(data[item])==dict:
                ret = select(data[item],fields)
n = input('按照格式输入:')
select(data,n)

三级菜单递归

menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '老男孩': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}
#相同的数据类型 嵌套在一起
 def Three_Level_Menu(menu):
    while True:
        for k in menu:print(k)
        key = input('>>>')
        if key == 'q':return 'q'
        elif key == 'b':break
        elif key in menu:
            ret = Three_Level_Menu(menu[key])
        if ret == 'q': return 'q'
Three_Level_Menu(menu)
三级菜单

 

posted on 2017-09-06 15:30  Symoon_g  阅读(204)  评论(0编辑  收藏  举报