Recursión de la función de Python (use la recursividad para encontrar la suma de 1 an, use la recursividad para encontrar el número n de Fibonacci para encontrar la suma de los números en la lista anidada para una clasificación rápida)

función recursiva

En pocas palabras, ajústese; lo más importante para la recursividad es encontrar la salida (es decir, la condición para detenerse)

cou = 5
def say_love():
    print('我爱你',end=' ')# 把这五个我爱你打在一行
    global cou
    cou = cou-1
    if cou>0:
        say_love()
say_love()# '我爱你 ''我爱你 ''我爱你 ''我爱你 ''我爱你 '

Una demostración simple, pero esto requiere llamar a un escalar global para juicio, también podemos pasar parámetros directamente y usar return para devolver la función. Por favor, vea la siguiente demostración:

def say_love2(n):
    if n > 0:
        print('我爱你',end=' ')
        return say_love2(n-1)

say_love2(5)# '我爱你 ''我爱你 ''我爱你 ''我爱你 ''我爱你 '

Hay otras formas de escribir, no las enumeraré una por una.
Hagamos algunos ejercicios simples:

1. Usa la recursividad para encontrar la suma de 1 an

def mysum(n):
    if n == 1:# 停止条件 当n等于1的时候返回1
        return 1
    return n + mysum(n-1)
    #要是实在还是没理解,可以把这个式子在草稿纸上写出来就很容易看懂了

s = mysum(100)
print(s)# 5050

2. Usa la recursividad para encontrar el número n de Fibonacci

# 斐波那契数列:1,1,2,3,5,8,13,21,34,55....
def feibo(n):
    if n == 1 or n == 2:# 停止条件
    # 后面的数是不是都是由最前面两个数'相加'得来的
    # 这里的相加是指以它两为基数相加得来的
        return 1
    return feibo(n-1)+feibo(n-2)# 第n个数是由前两个数相加得来的

f = feibo(10)
print(f) # 55

3. Encuentra la suma de los números en la lista anidada.

Puede anidar listas, tuplas, cadenas, enteros y números de punto flotante en la lista. Aquí, debe realizar un ciclo para determinar si es un número. Si es una lista, debe agregarlo directamente. Para hacer un juicio, el anidamiento no se limita a 2 niveles
. La diferencia entre isinstance () y type ():
type () no considera la subclase como un tipo padre y no considera la relación de herencia;
isinstance () considerará la subclase como tipo padre, considere la relación de herencia.

lists = [1,2,5,[1,7,3,'a'],(1,2),'abc',3]
def sum_num(n):
    s = 0
    for i in n:
        if isinstance(i,(int,float)):
        # if type(i) == int or type(i) == float:
            s += i
        if isinstance(i,(tuple,list)):
        # if type(i) == tuple or type(i) == list:
            s += sum_num(i)
    return s
print(sum_num(lists))# 25

4. Clasificación rápida

Vaya a un número de la lista, elimínelo y vuelva a recorrer la lista. El número mayor que el número tomado se coloca en la lista de la derecha y el número más pequeño se coloca en la lista de la izquierda. Finalmente, la función devuelve estos números Más , puede ver la operación real a continuación, no conozco la posibilidad, dañará QAQ

'''
             [4, 2, 6, 7, 5, 1, 3, 8, 9]
             
             [4, 2, 1, 3]          [5]    [6, 7, 8, 9]
             [] [1] [4,2,3]        [5]    [6,7]    [8] [9]
             [] [1] [][2][4,3]     [5]    [6][7][] [8] [9]
             [] [1] [][2][][3][4]  [5]    [6][7][] [8] [9]
'''
def quick_sort(l):
    # 结束条件
    if len(l) <= 1:
        return l
    # 1.取一个元素
    middle = l.pop(len(l)//2)
    # 2.定义2个列表:left,right,分别存放小于middle,和大于middle的元素
    left = []
    right = []
    for n in l:
        if n < middle:
            left.append(n)
        else:
            right.append(n)

    print(left, [middle], right)# 可以用来查看排序的实现
    # 函数递归
    return quick_sort(left) + [middle] + quick_sort(right)
l = [4, 2, 6, 7, 5, 1, 3, 8, 9]
print(quick_sort(l))

Nota: trate de no utilizar la recursividad si es posible

La recursividad es menos eficiente y la profundidad de la recursividad es limitada. Si excede esta profundidad, se lanzará una excepción.
Aquí debe cambiar la profundidad de la recursividad y debe utilizar el módulo sys.

import sys
sys.setrecursionlimit(1000000)
Resumen simple, no me gusta, no rociar
Además, si las condiciones lo permiten, puede dar me gusta, comentar y seguir.
QAQ

Supongo que te gusta

Origin blog.csdn.net/hmh4640219/article/details/112990437
Recomendado
Clasificación