• 递归函数的定义和几个小例子


    递归函数

    (1)什么是递归函数?

    我们都知道,一个函数可以调用其他函数。如果这个函数在内部调用它自己,那么这个函数就叫递归函数。

    (2)递归函数的作用

    举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n

     1 #不使用递归的方法:
     2 n=4      #求4的阶乘
     3 result=1
     4 i=1
     5 while i<=4:
     6     result=result*i
     7     i+=1
     8  
     9 print(result)
    10 
    11 #使用递归的方法:
    12 def test1(n):#定义函数来计算数字n的阶乘
    13     if n==1:
    14         return 1
    15     return n * test1(n-1)
    16  
    17 print(test1(5))
    18 #1在函数的内部调用自己本身
    19 #2递归函数本质是一个方法的循环调用,注意:有可能出现死循环
    20 #3一定要定义递归的边界(什么时候退出循环)

    输出结果为:

    1 24
    2 120
    3 [Finished in 0.4s]

    从上面两中方法的对比可以看出,递归函数的作用和循环的方法效果一样,即递归函数本质上是一个方法的循环调用,注意:有可能会出现死循环。因此,使用递归函数时,一定要定义递归的边界(即什么时候退出循环)。

    递归函数的另一个案例是斐波纳契数列。

    斐波纳契数列:1,1,2,3,5,8,13。。。(该数列中,有n个数字,从第三个数字开始:数值 =前一个数字 + 前面一个数字)

    即,n=(n-2)+(n-1)

     1 def get_num(n):#获取斐波拉契数列中第n个数字的值
     2     if n==1 or n==2:
     3         return 1
     4     return get_num(n-1) + get_num(n-2)
     5  
     6 #把获取的斐波拉契数字存放到列表中
     7 nums=[]
     8 for i in range(1,21):
     9     nums.append(get_num(i))#get_num获得一个斐波拉契数字
    10  
    11 print(nums)

    输出结果为:

    1 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]
    2 [Finished in 0.4s]

    以上两个案例是递归函数的经典案例,需要记住其使用方法。注意:在实际使用中,递归函数由于消耗时间比较长(相比for循环和while循环),所以很少使用。

  • 相关阅读:
    StructureMap经典的IoC/DI容器
    移植的7zip到Vxworks 取名vx7zip
    试验Boost在Vxworks上的应用日记 三
    Log4cpp 崩溃
    试验Boost在Vxworks上的应用日记 一
    Vx7zip改进
    GoAhead 2.5 Web Server 网页ROM化的改进
    试验Boost在Vxworks上的应用日记 二
    原来CoreBluetooth 只支持Bluetooth Low Energy
    可变长结构体
  • 原文地址:https://www.cnblogs.com/tianyiliang/p/7775071.html
Copyright © 2020-2023  润新知