五、函数_8.递归函数

递归函数

递归函数
    定义一个函数后,在此函数内调用自己
    递归函数必须要有结束,否则会一直循环下去,直到栈溢出
    递归函数的执行过程是一层层向内执行到最里层,再一层层向外执行

递归函数的缺点
    递归函数的效率并不高,性能浪费比较大,多数需求也能由for循环完成,所以能不用的情况尽量不要使用

# 递归函数
def recursion(n) :
    print('●  '*n)

    if n > 1 :
        recursion(n-1)

    print('●  '*n)

recursion(7)

●  ●  ●  ●  ●  ●  ●  
●  ●  ●  ●  ●  ●  
●  ●  ●  ●  ●  
●  ●  ●  ●  
●  ●  ●  
●  ●  
●  
●  
●  ●  
●  ●  ●  
●  ●  ●  ●  
●  ●  ●  ●  ●  
●  ●  ●  ●  ●  ●  
●  ●  ●  ●  ●  ●  ●  
实现阶乘 方法一:计算过程在函数从内向外执行时,计算顺序是把数字从小到大相乘
def factorial1(n) :

    if n >=3 :
        factorial1(n-1)

    if n == 2 :
        p = 1
    else :
        global m
        p = m

    p = p * n
    m = p
    print(p)

factorial1(7)

2
6
24
120
720
5040
实现阶乘 方法二:计算过程在程序从外向内执行时,计算顺序是把数字从大到小相乘
p = 1
def factorial2(n) :
    global p
    p = p * n

    if n >= 3 :
        factorial2(n-1)

    if n == 2 :
        print(p)

factorial2(5)

120
实现阶乘 方法三
def factorial3(n) :
    if n == 1 :
        return 1
    else :
        return n*factorial3(n-1)

res = factorial3(6)
print(res)

720
6*F5
        5*F4
                4*F3
                        3*F2
                                2*F1
                                        return 1
                                2*1 =2
                        3*2 =6
                4*6 =24
        5*24 =120
6*120 =720
实现斐波那契数列

求第n位的值,1,1,2,3,5,8,13,21,34,55......

方法一
def Fibonacci(n) :
    if n == 1 or n == 2 :
        return 1
    else :
        return Fibonacci(n-1)+Fibonacci(n-2)

res = Fibonacci(5)
print(res)

5
F6+F5   F7
    F5+F4 F4+F3     F6+F5
                F4+F3 F3+F2 F3+F2 F2+F1     F5+F4 + F4+F3
                                        F3+F2 F2+F1 F2+F1 1 F2+F1 1 1+1     4
                                                                        F2+F1 1 2 2 1 2 1 2     3
                                                                                            2 1 2 2 1 2 1 2     2
方法二

需要获取第X位,则发生了X-2次计算,所以用X控制计算次数,X每减少1,计算次数增加1,直至X减少到X=3时,计算完成

n1 = 0
n2 = 1
def fibonacci1(i) :
    global n1,n2

    if i == 1 :
        print(n1)
    elif i == 2 :
        print(n2)

    n = n1 + n2    # 1 2 3
    n1 = n2        # 1 1 2
    n2 = n         # 1 2 3

    if i > 3 :
        fibonacci1(i-1)
    elif i == 3 :
        print(n)
fibonacci1(7)

8
上一篇:7-1 循环-Fibonacci数列的运算 (50 分)


下一篇:机器学习——性能度量|Day2(续)