zoukankan      html  css  js  c++  java
  • day10 递归

    死循环,因此递归必须要定义一个明确的结束条件
    1 def calc(n):
    2     print(n)
    3     calc(n)
    4 calc(10)
    return 表示终止符号,最终会得出一个确切的返回值,且可以赋值
    1 def calc(n):
    2     print(n)
    3     if    int(n/2) == 0:
    4         return n
    5     return calc(int(n/2))
    6 
    7 a = calc(10)
    8 print(a)
    总结:
    递归即函数调用自己
    递归不能死循环,真的会死的
    递归每次进入更深一层的时候,必须要规模减少
    递归的效率很低,当前层在调用下一层的时候,要停滞当前层且保存当前层的状态等待下一层的计算返回值,
    倘若下一层继续调用下下一层同理,会无限循环保存导致栈溢出甚至内存不足

    
    
    正确的递归
    1 def num (n):
    2     print(n)
    3     if  int(n/2) == 0:
    4         return n
    5     return num(int(n/2))
    6 a = num(10)
    7 print(a)


    ps:小练习
    斐波那契数列 第n个数字是多少
     1 # 1,1,2,3,5,8,13,21.....
     2 # fib(6) = fib(5) + fib(4)
     3 # fib(5) = fib(4) + fib(3)
     4 # fib(4) = fib(3) + fib(2)
     5 # fib(3) = fib(2) + fib(1)
     6 # fib(2) = 1
     7 # fib(1) = 1
     8 
     9 # 双递归,非常费劲
    10 def fib(n):
    11     if    n == 1 or n == 2:
    12         return 1
    13     return fib(n-1) +fib(n-2)
    14 print(fib(40))
    大练习 问路递归练习
     1 import time
     2 
     3 person_list=['alex','wupeiqi','linhaifeng','zsc',"yangtuo"]
     4 def ask_way(person_list):
     5     print('-'*60)
     6     if len(person_list) == 0:
     7         return '根本没人知道'
     8     person=person_list.pop(0)
     9     if person == 'linhaifeng':
    10         return '%s说:我知道,老男孩就在沙河汇德商厦,下地铁就是' %person
    11 
    12     print('hi 美男[%s],敢问路在何方' % person)
    13     print('%s回答道:我不知道,但念你慧眼识猪,你等着,我帮你问问%s...' % (person, person_list))
    14     time.sleep(5)
    15     res=ask_way(person_list)
    16 
    17 
    18     print('%s问的结果是: %res' %(person,res))
    19     return res
    20 
    21 res=ask_way(person_list)
    22 print(res)
    23 
    24 # 流程
    25 # 列表有5人。先问alex,            不满足return条件判断,弹alex,        没有返回值,用剩下的列表作为参数继续运行函数,并等待一个返回值
    26 # 列表剩4人。再问wupeiqi,        不满足return条件判断,弹wupeiqi,        无法返回值,用剩下的列表作为参数继续运行函数,并等待一个返回值
    27 # 列表剩3人。再问linhaifeng,    满足return条件判断,函数中断,返回值即问路结果,
    28 # 返回值返回上一层,即wupeiqi层,        wupeiqi层获得返回值,    子函数结束,继续返回上一层
    29 # 返回值返回上一层,即alex层,        alex 层获得返回值,        子函数结束,继续返回上一层
    30 # 问路主函数得到最终返回值问路结果,函数结束。
    31 
    32 
    33 import time
    34 res=time.sleep(5)
    35 print('----------->')












  • 相关阅读:
    perl中的默认变量与Z/map介绍
    perl6中字符串字母编历
    将数字转化为特殊符号的密码
    vue: axios
    vue: alias
    background-size
    问题:当浏览器窗口变化时,内容的大小以及相对位置也要相应变化
    vue移动端适配
    Web 端屏幕适配方案
    vue: register and import
  • 原文地址:https://www.cnblogs.com/shijieli/p/9687716.html
Copyright © 2011-2022 走看看