zoukankan      html  css  js  c++  java
  • 零基础学python-18.2 递归函数与分解递归函数的执行步骤

    这一章节我们来讨论一下递归函数,一个经常避免使用的,但又不得不学会的函数

    递归函数:函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数

    我下面以递归求和为例子:

    >>> def test(x):
    	print(x)
    	if not x:
    		return 0
    	else :
    		return x[0]+test(x[1:])
    
    	
    >>> test([1,2,3,4,5])
    [1, 2, 3, 4, 5]
    [2, 3, 4, 5]
    [3, 4, 5]
    [4, 5]
    [5]
    []
    15


    如果我单纯给出上面的例子,大家是不是觉得非常的难以理解呢?

    我把上面的代码换一下:

    >>> def test(x):
    	print(x)
    	if not x:
    		return 0
    	else :
    		a=test(x[1:])
    		print(a)
    		return x[0]+a
    
    	
    >>> test([1,2,3,4,5])
    [1, 2, 3, 4, 5]
    [2, 3, 4, 5]
    [3, 4, 5]
    [4, 5]
    [5]
    []
    0
    5
    9
    12
    14
    15
    >>> 


    这样可能理解起来会容易点,我下面将会一步步的将上面的函数的执行过程分解给大家

    1.当[1,2,3,4,5]赋值到参数x里面,它会先执行print语句

    2.然后判断x是否还有对象,因为x存在对象,所以执行else的语句

    3.现在执行a=test[1:]这个语句,现在的x=[1,2,3,4,5],然后传递新的test的参数x的对象是[2,3,4,5]

    循环步骤1到3,直到x=[]

    4.由于test([])返回0,返回0,注意:这个时候test(x)里面的x是[],反推回去,也即是x[1:]=[],x=[5]

    5.由于test([])执行完返回0,x=[5],所以这个时候test([5])返回5

    6.同理,test([4,5])返回9,test([3,4,5])返回12,直到a=test([2,3,4,5]),a=14,打印a,然后x[0]=1,x[0]+14=15,因此最后会返回15

    其实,上面的代码类似于:

    >>> def test(aList):
    	res=0
    	for item in aList:
    		res+=item
    	return res
    
    >>> test([1,2,3,4,5])
    15
    >>> 

    很多时候递归跟循环接近,但是递归有一个好处就是遍历结构所有的数据项

    由于感觉上面说到不够明了,所以我们下面再举一个简单一点的例子:test([1,2,3])

    >>> def test(x):	
    	if not x:
    		return 0
    	else :
    		a=test(x[1:])		
    		return x[0]+a
    
    	
    >>> test([1,2,3])
    6
    >>> 


    分解步骤:

    test([1,2,3])

      if not x:

          return 0

      else:

          a=test([2,3])

                 if not x:

                     return 0

                 else:

                     a=test([3])

                            if not x:

                               return 0

                            else:

                                a=test([])

                                       if not x:

                                          return 0#对应test([])

                                return 3+0#对应test([3])

                       return 3+2#对应test([2,3])

            return 5+1#对应test([1,2,3])

    >>>6

    上面的步骤应该比较明细的了

    总结:我们这一章节简单介绍了递归函数以及分解了递归函数的步骤

    这一章节就说到这里,谢谢大家

    ------------------------------------------------------------------

    点击跳转零基础学python-目录

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Hbase记录-Hbase shell使用
    Hbase记录-Hbase基础概念
    JAVA记录-SpringMVC集成redis
    JAVA记录-redis缓存机制介绍(四)
    JAVA记录-redis缓存机制介绍(三)
    JAVA记录-redis缓存机制介绍(二)
    JAVA记录-redis缓存机制介绍(一)
    JAVA记录-SpringMVC scope属性的两种模式
    JAVA记录-JDBC介绍
    鼠标拖动,改变列表宽度
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4896729.html
Copyright © 2011-2022 走看看