zoukankan      html  css  js  c++  java
  • python学习笔记之--递归

    递归(recursion):
    1 是一个函数
    2 函数执行的过程中自己调用自己
    3 递归一定有结束调用自己的条件
    4 递归效率不高
    5 什么问题必须用递归?汉诺塔
     
    递归从逻辑上没有结束调用自己的条件时是会死循环的,但是编译器不会让你出现死循环(递归最大调用深度-985)
     
    def print_str(n):
        if n<0:
            return
        print(n)
        print_str(n-1)  #自己调用自己
     
    >>> def print_str(n):
    ...     if n<0:
    ...         return
    ...     print(n)
    ...     print_str(n-1)
    ...
    >>> print_str(10)
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    0
    n=10---->print_str(10)
                     print(10)
                     print_str(10-1)----这个时候n变成了9-->print_str(9)
                                                                                   print(9)
                                                                                   print_str(9-1)--------------->print_str(8)
                                                                                                                                 print(8)
                                                                                                                                 print_str(8-1)
    以此类推。。。。。。
     
     
    def print_str(n):
        if n == 0:
            return n
        return n+print_str(n-1)
        
    print_str(3):3+print_str(2)(待算)3=6
    print_str(2):2+print_str(1)(待算)1=3
    print_str(1):1+print_str(0)(待算)0=1
    print_str(0):0
     
     
    递归就是找规律
     
     
    斐波拉契数列:
    1,1,2,3,5,8,13 求第七个是13
    def fib(n):
        if n==1 or n==2:
            return 1
        a=1
        b=1
        for i in range(n-2):
            temp = a+b
            a=b
            b=temp
        return b
     
     
    print(fib(7))
    算法:
    1 两个数a=1,b=1
    2 做个计算a+b(temp)
    3 a的值变为b
    4 b的值呢变为temp就可以了
    5 重复以上过程
     
    递归实现:
    算法:求第N项=n-1项+n-2项
    当n=1 or n=2时,return 1
     
    def fib(n):
        if n==1 or n==2:
            return 1
        return fib(n-1)+fib(n-2)
     
    print(fib(7))
    >>> def fib(n):
    ...     if n==1 or n==2:
    ...         return 1
    ...     return fib(n-1)+fib(n-2)
    ...
    >>> print(fib(7))
    13
    改进输入7,打印1,1,2,3,5,8,13
    def fib(n):
        if n ==1 or n ==2:        
            return 1
        temp=fib(n-1)+fib(n-2)
        return temp
     
    for i in range(1,8):
        print(fib(i))
  • 相关阅读:
    Kafka速览
    分布式消息中间件(二)ActiveMQ
    PageUtil 分页
    Tomcat配置
    CryptographyUtil盐加密
    InitComponent的使用
    Shiro权限总结
    【转】Java自学之路——by马士兵
    ExcelUtil
    Java操作Excel之Poi
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11615694.html
Copyright © 2011-2022 走看看