English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste artigo, você aprenderá a criar funções recursivas (funções que chamam a si mesmas).
A recursão é o processo de definir algo com base em si mesmo.
Um exemplo do mundo físico é colocar dois espelhos paralelos que se enfrentam. Qualquer objeto entre eles será refletido recursivamente.
No Python, sabemos que umfunçãoPode chamar outras funções. A função pode até chamar a si mesma. Esses tipos de construções são chamados de funções recursivas.
A seguir está um exemplo de função recursiva para encontrar o fatorial de um número inteiro.
O fatorial de um número é a multiplicação de todos os inteiros1é o produto de todos os inteiros até esse número. Por exemplo, o fatorial6(representado como6!(é)1 * 2 * 3 * 4 * 5 * 6 = 720"."
def calc_factorial(x): """Esta é uma "Função recursiva para calcular o fatorial de um inteiro" if x == 1: return 1 else: return (x * calc_factorial(x-1)) num = 4 print("O fatorial de", num, "é", calc_factorial(num))
No exemplo acima, calc_factorial() é uma função recursiva que se chama a si mesma.
Quando chamamos essa função com números inteiros positivos, ela se chamará recursivamente, reduzindo a quantidade.
Cada função multiplicará o número pelo fatorial do número seguinte até que ele seja1. Pode ser explicado nos seguintes passos.
calc_factorial(4) # 1ª chamada com 4 4 * calc_factorial(3) # 2ª chamada com 3 4 * 3 * calc_factorial(2) # 3ª chamada com 2 4 * 3 * 2 * calc_factorial(1) # 4ª chamada com 1 4 * 3 * 2 * 1 # retorno de 4ª chamada como número =1 4 * 3 * 2 # retorno de 3ª chamada 4 * 6 # retorno de 2ª chamada 24 # retorno de 1ª chamada
quando o número cai para1ocorre, a recursão termina. Isso é chamado de condição básica.
Cada função recursiva deve ter uma condição básica de parada para evitar chamadas infinitas de si mesma.
O interpretador Python limita a profundidade da recursão para ajudar a evitar recursão infinita, que pode levar a pilha cheia.
Pela padrão, a profundidade máxima de recursão é 1000. Se exceder o limite, o resultado será RecursionError. Vamos ver um exemplo de condição.
def recursor(): recursor() recursor()
Resultados de Saída
Traceback (última chamada mais recente): Arquivo "<string>", linha 3, no módulo Arquivo "<string>", linha 2, em um Arquivo "<string>", linha 2, em um Arquivo "<string>", linha 2, em um [Linha anterior repetida 996 vezes] RecursionError: profundidade máxima de recursão excedida
As funções recursivas tornam o código mais limpo e organizado.
A recursão pode dividir tarefas complexas em problemas mais simples.
Em comparação com a geração de sequências usando aninhamento, a recursão é mais fácil de usar.
Às vezes, a lógica por trás da recursão é difícil de seguir.
As chamadas recursivas são caras (baixa eficiência), pois consomem muita memória e tempo.
As funções recursivas são difíceis de depurar.