码迷,mamicode.com
首页 > 编程语言 > 详细

15.python变量,递归

时间:2019-10-16 09:42:38      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:示例   mamicode   数据结构   ref   target   报错   cal   读取   规模   

 原文:https://www.cnblogs.com/linhaifeng/articles/6113086.html#_label6

# 如果函数的内容有global关键字
#   - 有声明局部变量
        # NAME = ["产品经理","廖波湿"]
        # def qupengfei():
        #     global NAME
        #     NAME = "自己"
        #     print(‘我要搞‘, NAME)
        # qupengfei()
#   - 错误示例
        # NAME = ["产品经理","廖波湿"]
        # def qupengfei():
        #     NAME = "自己"
        #     global NAME
        #     print(‘我要搞‘, NAME)
        # qupengfei()
#   - 无声明局部变量
        # NAME = ["产品经理","廖波湿"]
        # def qupengfei():
        #     global NAME
        #     NAME = ["阿毛"]
        #     NAME.append(‘XXOO‘)
        #     print(‘我要搞‘, NAME)
        # qupengfei()

######## 全局变量变量名大写
######## 局部变量变量名小写


# 优先读取局部变量,能读取全局变量,无法对全局变量重新赋值 NAME=“fff”,
#     但是对于可变类型,可以对内部元素进行操作
# 如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值 NAME=“fff”

函数之间可以进行嵌套

NAME = 海风

def huangwei():
    name = "黄伟"
    print(name)
    def liuyang():
        name = "刘洋"
        print(name)
        def nulige():
            name = 沪指花
            print(name)
        print(name)
        nulige()
    liuyang()
    print(name)

huangwei()
# 黄伟
# 刘洋
# 刘洋
# 沪指花
# 黄伟

 

技术图片

 

 

def weihou():
    name = "陈卓"
    def weiweihou():
        nonlocal name   # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
        name = "冷静"

    weiweihou()
    print(name)

print(name)
weihou()
print(name)
# 刚娘
# 冷静
# 刚娘

 

def foo():
    print(from foo)
    bar()

foo()#报错,未定义

def bar():
    print(from bar)

递归:

def calc(n):
    print(n)
    if int(n/2) ==0:
        return n
    return calc(int(n/2))
 
calc(10)
 
输出:
10
5
2
1

 

import time

person_list=[alex,wupeiqi,linhaifeng,zsc]
def ask_way(person_list):
    print(-*60)
    if len(person_list) == 0:
        return 根本没人知道
    person=person_list.pop(0)
    if person == linhaifeng:
        return %s说:我知道,老男孩就在沙河汇德商厦,下地铁就是 %person

    print(hi 美男[%s],敢问路在何方 % person)
    print(%s回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问%s... % (person, person_list))
    time.sleep(1)
    res=ask_way(person_list)
    return res
res=ask_way(person_list)
print(res)

 

递归特性:

1. 必须有一个明确的结束条件

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

堆栈扫盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html 

尾递归优化:http://egon09.blog.51cto.com/9161406/1842475

15.python变量,递归

标签:示例   mamicode   数据结构   ref   target   报错   cal   读取   规模   

原文地址:https://www.cnblogs.com/raitorei/p/11682188.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!