• python 递归


    递归:在函数内部,可以调用其他函数,如果一个函数在内部调用自己本身,这个函数就是递归函数。
    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)
     
    
    
     
     
     
  • 相关阅读:
    IDEA最常用快捷键汇总+快速写出Main函数
    设计模式之代理模式
    Java多线程中join、yield、sleep方法详解
    git基础命令详解
    用友网络科技Java高级开发面试题(2019)
    Java内部类超详细总结(含代码示例)
    构造器中绝对绝对不能调用可被覆盖的方法
    写给小白看的Git的安装配置与使用
    Vue学习笔记5--前端工程化
    Vue学习笔记4--vue-router路由
  • 原文地址:https://www.cnblogs.com/zt0903/p/10683838.html
Copyright © 2020-2023  润新知