一甲子余温

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
递归:在函数内部,可以调用其他函数,如果一个函数在内部调用自己本身,这个函数就是递归函数。
def calc(z):                                # 定义一个函数
    s = int(z/2)                 # 计算传入的值除以2
    print(s)                   # 打印计算结果
    if s > 0:                   # 判断计算结果是否大于0
        calc(s)                             # 如果计算结果大于0将结果传入再次调用函数
    print(z)                    # 当结果小于零时打印传入的参数z


calc(10)

输出的结果是:5 2 1 0 1 2 5 10

在python的递归函数,每调用一次自己,上一次调用会存到一个栈里,知道符合结束条件,在依次退回上一级结束函数。
递归的特性:

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

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

递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,

栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧.由于栈的大小不是无限的,所以,递归调用的次数过多会导致栈溢出。

写一个计算计算阶层的例子:
def factorial(n):
    if n == 1:
        return 1
    return n * factorial(n-1)


s = factorial(10)
print(s)
二分运算 

如果规定某一科目成绩分数范围:[0,100],现在小明知道自己的成绩,他让你猜他的成绩,如果猜的高了或者低了都会告诉你,用最少的次数猜出他的成绩,你会如何设定方案?
def guess_mark(n, high, low):
    mid = int((high +low)/2)
    if mid < n:
        print(mid, "猜低了")
        return guess_mark(n, high, mid)
    elif mid > n:
        print(mid, "猜高了")
        return guess_mark(n, mid, low)
    else:
        return mid, "猜对了"
    
    
t = guess_mark(18, len(data), 0)
print(t)

 

 

 
 
 
posted on 2019-04-10 15:44  一甲子余温  阅读(96)  评论(0编辑  收藏  举报