• 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))
  • 相关阅读:
    别闹了,这些都不是数字化转型
    对不起,“下一代ERP”仍旧是现在的ERP
    这世界真小
    SAP S4HANA 2020 Fully-Activated Appliance 虚拟机版分享
    花费巨资参加SAP培训真的有用吗?
    剑指 Offer 07. 重建二叉树
    剑指 Offer 06. 从尾到头打印链表
    剑指 Offer 05. 替换空格
    剑指 Offer 04.二维数组中的查找
    剑指 Offer 03. 数组中重复的数字
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11615694.html
Copyright © 2020-2023  润新知