zoukankan      html  css  js  c++  java
  • 递归

    在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数(recursion)。

    >>> def recursion():
    	return recursion()
    
    >>> recursion()
    Traceback (most recent call last):
      File "<pyshell#3>", line 1, in <module>
        recursion()
      File "<pyshell#2>", line 2, in recursion
        return recursion()
      File "<pyshell#2>", line 2, in recursion
        return recursion()
      File "<pyshell#2>", line 2, in recursion
        return recursion()
      File "<pyshell#2>", line 2, in recursion
        return recursion()
      File "<pyshell#2>", line 2, in recursion
        return recursion()
      File "<pyshell#2>", line 2, in recursion
        return recursion()
        ……
        ……
        ……
    #如果直接返回函数本身,函数会一直循环下去,直到内存溢出,所以通常情况下要限制递归的次数
    >>> import sys
    >>> sys.setrecursionlimit(10000)    #将递归限制为10000次
      
    

    为了学习递归,首先尝试用非递归的方法写一个函数,求5的阶乘,即是1*2*3*4*5。

    >>> from functools import reduce
    >>> reduce(lambda x,y:x*y,[1,2,3,4,5])
    120
    #用reduce可以轻松实现
    

    在写个递归版本,加深对递归的理解

    >>> def recursion(n):
    	if n == 1:
    		return 1
    	else:
    		return n * recursion(n-1)
    
    	
    >>> recursion(5)
    120

    拆解帮助理解:

    recursion(5) = 5*recursion(4*recursion(3*recursion(2*recursion(1))))

    recursion(4) = 4*recursion(3)
    recursion(3) = 3*recursion(2)
    recursion(2) = 2*recursion(1)
    recursion(1) = 1*1

    recursion(5) = 5*4*3*2*1 = 120

  • 相关阅读:
    java实现23种设计模式之中介者模式
    java实现23种设计模式之访问者模式
    java实现23种设计模式之状态模式
    java实现23种设计模式之备忘录模式
    java实现23种设计模式之命令模式
    java实现23种设计模式之责任链模式
    VS2012+OpenCV2.4.9+OpenTLD环境搭建
    Real-time Compressive Tracking
    OpenTLD相关资料
    华为面试题
  • 原文地址:https://www.cnblogs.com/ginsonwang/p/5277639.html
Copyright © 2011-2022 走看看