zoukankan      html  css  js  c++  java
  • 递归函数的定义和几个小例子

    递归函数

    (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循环),所以很少使用。

  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/tianyiliang/p/7775071.html
Copyright © 2011-2022 走看看