Рубрики
Без рубрики

Funções Em Python

Rentução uma função ém um bloco de Código Организациядо Эм-Ротилизавве que É Capaz de … Теги с Python, начинающими, учебниками.

Вводящий

Ума Função ém bloco de Código Организадо е Reutilizável que é capaz de realizar UMA Детенада Ачãо Отказ Funções nos ajudam a deixar o nosso código mais модульный , TRAZENDO Возможность Reusabilidade Conforme Nosso Programa Fica Cada Vez Maior, как Funções o Tornam Mais Organado Ey Gerencivel.

COMO Vimos Ao Longo Do Guia, Python Já Nos Traz Várias Funções Pré-Construídas, Como Por Exemplo Печать () е Диапазон () , Mas Também É Assível Criarmos Nossas Prósias Funções!

Анатомия Дас Funções.

PodeMos Imaginar As Funções (de modo geral) como um Mecanismo Capaz de Chedber Valores Como вход E então Realizar Operações Nesses Valores E Retornar UM вывод Отказ

Características DAS. Funções.

  • Посуда Им ном
  • Посуда Parâmetros (0 OU MAIS)
  • Посуда Docstrings (ОПЦИОНАЛЬНЫЙ, ПОРЕМ РЕКОМЕНДАДО)
  • Посуда Им корпус
  • Реторнам Algo (недейственный)

Определение UMA Função

EM Python Devemos Seguir Seguinte Sintaxe Para Construirmos UMA Função:

def nome_da_função(parametros):
    """docstrings"""
    

PARA DEFIR UMA фанчион é nebsário que que sigamos algumas решается:

  • Bloco de Funções Começam Com A Palavra-Shave деф Seguido Do Nome Da Função E Пандиты () .
  • O Nome Da Função Идентифицирован исключительными губами. Nomenclatura de Funções Segue As Mesmas Regrays de Escrita de identialadores EM Python.
  • Parâmetros de input ou Argentos (Dados fornecidos por nós) devem ser colocados entre пандитен () Отказ Eles São Opcionais.
  • DOIS PONTOS ( : ) PARA MARCAR O Final Do Cabeçalho Da Função.
  • Офференция PodeMos Usar Strings de Documentação ( Docstrings ) Para Descrever O que nossa função faz.
  • UMA OU MAIS instruções Python Válidas Que Conturem o Corpo Da Função. Как Deckarações Devem Ter o Mesmo Nível de indegação (Джераментинг 4 Испания).
  • O Comando Opcional Вернуться (Expressão) Sai da Função, оправа Passando UM Parâmetro Para o Chamador. O Comando de Retorno SEM ARGUCTOS É O Mesmo que return Нет Отказ

POR Exemplo, Vamos Defire UMA Função Capaz de Converter UMA Temperatura EM По Фаренгейту. Пара Цельсия Отказ

def fahr_to_celsius(temp):
    """
    Função que recebe como argumento uma temperatura
    em Fahrenheit e converte ela para Celsius 
    """
    return ((temp - 32) * (5/9))

UMA VEZ Que Temos a Função Spionida, Agora Podemos Usá-La. SE Quisermos Obter Ajuda, Podemos Contar Com o Comando Помощь () que nos trará o docstrings dessa função.

help(fahr_to_celsius)

Para invocar a função, devemos Passar UM Valor Para Ela Como Aracgueto:

print(fahr_to_celsius(91.76)) # 33.2
print(fahr_to_celsius(101.3)) # 38.5

Como Essa Função Tem Valor de Retorno, PodeMos Armazenar o Seu Resulardado EM UMA Variável:

celsius = fahr_to_celsius(70.76)
print(celsius) # 21.53333333333334

Também Podemos Defire UMA Função Que Não Irá Recornar UM Valor, Por Exemplo:

def cumprimentar(nome):
    """
    Essa função cumprimentará a pessoa passada por parâmetro
    """
    print("Olá {0} Seja bem-vindo".format(nome))

А Função Foi Criada e Está Softáida, Porém Nada Aconteceu. Para Que Ela Tapa Funciapar Precisamos invocá-la Para Isso Chamaremos ELA POR SEU NOME E PASSAREMOS OS Parâmetros Реквизитадос POR ELA:

cumprimentar("Gabriel") # Olá Gabriel Seja bem-vindo

Соблюдайте que asta função apenas nos Impreime uma string, Ума Вес que ela não Tem Valor de Retorno.

Parâmetros Padrão.

Подемос определенный Parâmetros Padrão Para Caso A Função Seja Invocada SEM Nenhum Argingo Passado, Estes Preencherão As opções.

def padrao(valor=100):
    """Função que apenas imprime um valor"""
    print("O valor definido foi: " + str(valor))

padrao() # 100
padrao(10) # 10
padrao(33) # 33

DocString.

String String Depois DO Cabeçalho Da Função é Chamada de Docstring, é Uma Строка USADA PARA Esperificar A Tuncoliadade Da Nossa Função, E Embora Seja Opcional, VOS Lembro Que Documentar É UMA Gathere Prática de Programação, UMA VEZ Que Tossivelmente Autrass Pessoas Estarão Lendo Nosso Código, включительно ESTATE ATÉ MESMO PARA VOCê LEMBRAR O QUE VOCê FEZ!

Caso Queiramos ver o docstring de Uma Função, Podemos Acessar o Atributo __doc__ :

print(padrao.__doc__) # Função que apenas imprime um valor

O Comando return.

Novamente, O Comando вернуть NOS Perious Fazer Com que a Função Retorne UM Valor E Towsamos Armazená-lo EMMA Variável, POR Exemplo:

def func(x):
    return x + 1 

y = func(1)
z = func(2)
print(y) # 2
print(z) # 3

Utilizando Somente O вернуть Nossa Função Retornará Нет :

def func():
    return 

x = func()
print(x) # None

Имен

Antes de Falarmos Sobre O Conceito de Простовое пространство E Ecsopo EM Python, Emate Entendermoss os (Também Conhecidos Como Идентификаторы ), que São Simplemente UM NOME DADO AOS OBJETOS. Lembre que Tudo Em Python ém icometo. Имена São Uma Maneira de Acessar Os Objetos.

POR Exemplo, Quando Fazemos A Atribuição х , Нес Касо 13 EM Objeto Armazenado EM Memória E х é o имя Que Este Objeto Está Associado. Nós podeMos inder o EndeReço (EM RAM) de umb objeto Através da Função Construída EM Python Chamada ID () , vejamos Exemplos:

x = 13

print(id(13)) # 10914880
print(id(x)) # 10914880

Соблюдайте que Ambos SE рефесем Ao Mesmo Objeto, Vamos Agora Shallar:

x = 13

print(f'id(x) = {id(x)}') # id(x) = 10914880

x = x + 1

print(f'id(x) = {id(x)}') # id(x) = 10914912
print(f'id(14) = {id(14)}') # id(x) = 10914912

y = 13

print(f'id(13) = {id(13)}') # id(13) = 10914880

Veja Que Insiblement Em objeto 13 é criado e o имя х é ассоциация com eled, quando executamos a a a aifrance х + 1 , Ум Новообъето 14 é criado, e agora х É AssociaDo Com EsseTo, Tendo Ele UM NOVO EndeReço de Memória, PodeMos Подтверждение Essa Afirmação Ao Veristarmos que ID (X) е ID (14) Пожалуйста о Mesmo EndeReço.

Финализа, Quando Executamos y Оно имя y SE Associa Com o Objeto Antigo 13 , ungendo Seu EndeReço.

Essa Dinâmica É Capaz de Tornar Python UMA Linguagem Muito Poderosa, UMA VEZ Que UM Name Pode Referir-SE Qualkquer Tipo de objeto.

x = 1
x = 'Programação com Python'
x = [0,5,10]

Todas Essas Expressões São Válidas E х IRA REALIR-SE à Três Difeerentes Tipos de Objetos Em Difeerentes экземпляры. Funções Também São Objetos EM Python, Sendo Assim, имена UM PORE FAZER RELEINCIA ELA.

def zero():
    return 0

z = zero
print(z()) # 0

O Имя z Официальный POR Nós Pove Fazer Releasencia A UMA Função E Através Dele Podemos Chamar An Função.

Пространство имен

Им пространство имен EM Python é Uma Coleção do NoMes. Portanto, Именное пространство имен Essencialmente UM MapeAmento do NoMes Para OS Objetos Contacter. Aquerquer Momento, разные пространства именных пространств Podem Coexistir Collectionsamente isolaados – O Isolayame Garante que Não Haja Colisões do NoMes. Simplemente, DOI именные пространства EM Python Podem Ter o Mesmo Nome SEM Que Haja Nenhum Flancea. Именное пространство Empace Emailado Como UM Dicionário Python.

Нет пространство имен HAUM MAPEAMEATEO DE NOME PARA OBJETO, COM OS NOMES COMO CHAVES E OS OSJETOS COMO Valores. Разъединенные пространства имен Podem Usar o Mesmo Nome E Mapeá-lo Para Um Objeto Diferente. Пространства имен alguns exemplos deples:

  • Пространство имен местный : Este Namepace Inclui NoMes Locais Doctro de Uma Função. Este NameSpace É CriaDo Quando UMA Função É Chamada E Dura Apenas até que a bunção Retorne.
  • Пространство имен Global : Este Pespace Inclui NoMes de Vários Módulos Importados que ose está usando em um projeto. É criado quando o módulo écluído no projeto e dura até o final do script
  • Пространство имен встроенный : Este пространство имен включает в себя Funções Internas e NoMes de exceção InternoS.

EM Python, VOCE PORE Então Imaginar UM имен пространства COMO UM MAPEAMEATEO DE TODOS OS NOMES que que que que que objetos coraturents.

Эскоп

Пространства имен EPHORA EKATAM Vários Extensivos ExperiDiDos, Talvez Não ToxaMos Acessar Todos Eles de Todas в качестве Partes Do Programa. É nesse momento que o Conceito de Escopo entra Em Jogo.

PodeMOS Dizer Que o Escopo é Part Programa Partir Do Qual UM Nenhum Pode Pode Pody Pode Pode Ser Acessado Diretamente SEM Nenhum Prefixo.

Помощник квалификации, Esistem Pelo Menos Três Escopos Aninhados.

  • Escopo Da Função Atual que que a que que domes locais
  • Escopo Do Módulo Que Toxui NoMes Globais
  • Escopo Enterno Que Toxui NoMes Construídos

QUANDO UMA RELECTONCIA E FEITA DENTRO DE UMA FUNCHãO, O Name é procurado Нет пространства имен Местные, Depois Нет пространства пространства имен Global E, Finglemente, Нет пространства имен Enterno.

Caso Haja UMA Função Doctro de Outra Função, UM NOVO Escopo Será Aninhado Doctro Do Consoco Local.

SEEMAMOS AGORA O SEGUINTE Exemplo:

def externa():
    z = 13
    print(z)
    print(f'valor de z = {z}')
    def interna():
        y = 14
        print(f'valor de y = {y}')
    interna()

x = 10
externa()
print(f'valor de x = {x}')

O Сценарий Nos Trará O Seguinte Выход:

valor de z = 13
valor de y = 14
valor de x = 10

Aqui, Variável х Está Нет пространства имен Global. Variável z Независимо от пространства имен Местные DA Função Externa () E A Variável y Está Нет пространства имен Местные анинадо да Фунсио Международный () Отказ

QUANDO ESTAMOS NA FUNCHãO Международный () , y É UMA Variável Местный пункт Nós, z é não-local e х é global. Nós podemos ler e Atribuir Novos Valores à y Порм СО ПОДЕМЕС ЛЕР z е х Através da Função Международный () Отказ

SE Tentarmos Atribuir UM NOVO Valor Para A Variável z UMA Nova Variável z Será Criada Нет пространства имен Местное пространство Нет качества Eferente Do Nao местные z . O Mesmo Acontece Quando Atribuimos UM NOVO Valor Пара х Отказ

Entretanto, SE CANARMOS х COMO Global, Todas As Relectioncias E Atribuições Irão Para Глобальный х Отказ Абитания, SE Desejarmos Reatribuir A Variável z , ELA DEVE SER DEALADA COMO NAO-LOATOR, VAMOS VER MAIS UM Exemplo Para Ilustrar Ideia.

def externa():
    x = 13
    print(x)
    print(f'valor de x = {x}')
    def interna():
        x = 14
        print(f'valor de x = {x}')
    interna()

x = 10
externa()
print(f'valor de x = {x}')

O Сценарий Nos Trará O Seguinte Выход:

valor de x = 13
valor de x = 14
valor de x = 10

Neste último Script de Exemplo, Três diferentes variáveis х SãO REACTIDIDAS EM пространства имен SELADOS E AcessAdas de Acordo, Enquanto Que no Seguinte Script:

def externa():
    global x
    x = 20
    def interna():
        global x
        x = 30
        print(f'x = {x}')
    interna()
    print(f'x = {x}')

x = 10
externa()
print(f'x = {x}')

O Сценарий Nos Trará O Seguinte Выход:

x = 30
x = 30
x = 30

Neste Caso Esperyfico, Todas As Relectioncias E Atribuições São Para A Variável Global х POR CAUSA DO USO DA PALAVRA-SHAVE глобальный Отказ

O que ocorre então quando chamamos/invocamos uma função?

  • Parâmetro формальный se conecta com o valor do Parâmetro Real. quando a função é chamada
  • UM NOVO Escopo/Quadro/Ambiente é criado quando ontra uma função
  • Эскопо É O MAPEAMEATEO DE NOMES PARA objetos
# Definição da Função
def f(x): # parâmetro formal
    x += 1
    print('Em f(x): x = ',x)
    return x 

# Código principal do Programa
# -> Inicializa a variável x
# -> faz uma chamada de função f(x)
# -> atribui o retorno da função para a variável z
x = 10
z = f(x) # parâmetro real
print(z) # 11

Funções Como Argingos

Argustos Podem Asperiar Qualkquer Tipo, Até Mesmo Funções:

def func_a():
    print('dentro da func_a')

def func_b(y):
    print('dentro da func_b')
    return y

def func_c(z):
    print('dentro da func_c')
    return z()

print(func_a()) # chama a função func_a, não recebe parâmetros
print(5+func_b(2)) # chama a função func_b, recebe um parâmetro
print(func_c(func_a)) # chama a função func_c, recebe outra função como parâmetro

Соблюдайте que:

  • Фунчано func_a реторор Нет Pois Ela Apenas Imprime UMA String
  • Фунчано func_b Retorna 2 (Valor Que Passamos через Aracgueto)
  • Фунчано func_c Получить func_a COMO Parâmetro, Que Por Sua Vez Retorna Никто

Exemplo Do Escopo.

NEM TODAS AS Variáveis São Acessíveis Partir de Todas в качестве Partes Do Nosso Program, e Nem Todas As Variáveis Eskem Durante O Mesmo Período de Tempo. Onde UMA Variável é Acessível E POR QUANTO TEMPO ELA ESSEDE COMO COMO E FACHIDIDA. Chammos Parte de Program Programa Onde UMA Variável Está Acessível de Seu Escopo, E Duração Para Aqual a Variável Esseee Seu Tempo de Vida.

UMA Variável Que é Função é função é função é função. ELA ECESSIVEL Partir Do Ponto Em Que Foi ReperiDa Até O Final Da Função E Exizee Enousento Ancanto Engiver Emperiver Excução. ОС NOS DOS Parâmetros NA DEACHICãOA DA FUNCHãO SE Comportam Como Variveis Locais, MAS Contêm OS Валорам Que Passamos Para A T Função Quando Chammos. Quando usamos o operador de atribuição ( = ) Doctro de Uma Função, SEU Comportamentame Padrão é Кррур Ума Нова Вариавел Местные – Менос Que Uma Variável Com O Mesmo Nome Já Esteja Difortida Нет местных мест.

  • Doctro de Uma Função, Podemos Acessar UMA Variável ReperiDa Fora Dela
  • Doctro de Uma Função, NãO PodeMos Modififar UMA Variável Reperida Fora Dela, Na Verdade Podemos Utilizando A Variável глобальный , Mas Normalmente Não o идеал
def f(y):
    # x é redefinido no escopo de f
    x = 1
    x += 1
    print(x)

x = 5
f(x) # 2
print(x) # 5

Neste Caso Temos DifeRentes Objetos х , фанчион f () IRA UTILIZAR O. х ReperiDo Dentro Dela E Печать () irá imprimir o objeto х Глобальный.

def g(y):
    print(x)
    print(x+1)

x = 5
g(x)
print(x)
# 5
# 6
# 5

Neste caso a função G () е Печать () Vão Usar O Mesmo Objeto х Глобальный.

def h(y):
    x += 1

x = 5 
h(x)
print(x)
# UnboundLocalError: local variable 'x' referenced before assignment

Neste Exemplo Ocorrerá ru Erro, UMA VEZ Que Tunção h () Está Tentando Modififar o objeto х Антес Mesmo Dele Ser SerfiDo.

Глобалы Função ()

COMO O Próprio Nome Indea, Função глобал () Exibirá Informações de Escopo Global. POR Exemplo, SE Abrymos UM Консоль Python E Inserirmos глобал () , UM Dicionário uncluindo Todos os NoMes E Valores de Variáveis Нет Escopo Global Será Retornado.

Veja que estou usando ... PARA FOREVIAR O BUSTORDADO:

>>> globals()
# {'__name__': '__main__', ..., '__builtins__': }

SE ADICIONAMMOS UMA Variável, ELAGORA SERA incluída no Escopo Global:

x = 1
globals()
# {'__name__': '__main__', ...,  '__builtins__': , 'x': 1}

Местные жители Função ()

COMO O Próprio Nome Indea, Função Местные жители () Retornará um dicionário uncluindo Todos OS NOMES E Valores Locais.

def anime():
    nome = 'Naruto'
    print(locals())

anime() # {'nome': 'Naruto'}

SE Chamarmos a Função Местные жители () No Escopo Global, O Bullowado Será Idnyntico Ao ResultoDado Da Função глобал () Portanto Esteja Ciente Dispo Quando Usá-La:

globals() is locals() # True

* args & ** kwargs

Как variáveis mágicas * args е ** kwargs Сан-Нормировка USADAS EM Difordições de Funções, ELAS NOS Permitem Passar UM Número Variável de Arguceos Para UMA Função. Variável Nesse Caso COSTA COSTA QUE NãO SABEMOS DE ANTEMãO ACTOS ARGECTOS VAMOS CENTER, ENTãO NESE CASO UTILIZAMOS * args е ** kwargs Отказ

* args.

* args é usado para квитан UMA Variável Que NãA Tenha Palavras-Shavave, Veja Urt Exemplo:

def soma(*args):
    total = 0
    for num in args:
        total += num 
    return total

print(soma(2,3,4,6)) # 15
print(soma(2,3,4,6,5,5,5,1,2)) # 32
print(soma(2,3)) # 5

** kwargs.

** kwargs NOS PASSARMOS VARIáveis COM Palavras-Shave COMO Puranto, veja exemplos:

def pessoa(**kwargs):
    print(kwargs)
    for nome, idade in kwargs.items():
        print(f'{nome} tem atualmente {idade} anos de idade')

pessoa(gabriel='33', rafael='47', daniel='22')
# {'gabriel': '33', 'rafael': '47', 'daniel': '22'}
# gabriel tem atualmente 33 anos de idade
# rafael tem atualmente 47 anos de idade
# daniel tem atualmente 22 anos de idade

Recursão.

«Рекурсвидеть» Em Termo Usado de Maneira Mais Gelo Para Descrever O Processo de Repetição de um objeto de um jito Похожие Ao Que Já Fora Mostrado. UM BOM Exemplo Disso São AS Images Repetidas que Aparecem Quando Dois Espelhos São Apontados Um Para Outro.

Outro Grande Exemplo Seria O Triângulo de Sierpinski – Também Chamado de Junta de Sierpinski – É UMA Figura Geométrica Bootida Através de UM Processo Recursivo . ELE É UMA DAS FORMAS Elementares Da Geometria Fractal POR Apresentar Algumas Propriedades, Tais Como: Ter Tantos Pontos Como O Don Do Boudunto Dos Números Realiz; тер агуальный ноль; SER AUTO-SEMELHANTE (UMA PARTE SUA É IDêNTICA AO TODO); NãO Perder Perder Sua Foreialção Inible à Medida Que é Ampliabo. Foi Primeiramente Descripto EM 1915 Por Waclaw Sierpinski (1882 – 1969), Matemático Polonês.

Image do Triângulo de Sierpinski:

Pensando de forma вычислительный :

  • Algoritmicamente Falando, Recursão É UMA Maneira de Desenvolver Soluções Para Procements Através de разделить ou Уменьшение и покор Reduzindo O Procementa Para Versões Simplifificads do Mesmo Flancea

  • Семантикамент: UMA Técnica de Programação Onde Função Чама С.И. Месмо

  • EM Programação, O objetivo é não ter recursão Infinita

  • Deve-se ter 1 Ou Mais Casos Bases que são fáceis de Resolver

  • REVE-SE RESOLVER O MESMO ПРОБЛЕМА EM ALGUM OUTRO вход com o objetivo de Simplifificar o Вход делать проблему майор

Recursão Em Python

Nós sabemos que em Python Essível UMA Função Арус Хамара Funções , включительно és revível que uma hame ela mesma, esses tipos de Constructos São Chamados de Funções Recursivas Отказ

Seguir Temos o Exemplo de UMA Função que descobre o Fatorial dum rum Inteiro. Fatatorial dum número é produto de todos inteiros de 1 Até Esse Número. Por Exemplo, O Fatorial de 5 (Denotado Por 5! ) é 1x2x3x4x5 Отказ

Exemplo de Uma Função Recursiva :

def fatorial(x):
    """
    Essa é uma função recursiva
    Ela calcula o fatorial de um número inteiro
    """
    if x == 1:
        return 1
    else:
        return (x * fatorial(x - 1))

y = 4
z = 10
print("O fatorial de {0} é {1}".format(y,fatorial(y))) # O fatorial de 4 é 24
print("O fatorial de {0} é {1}".format(z,fatorial(z))) # O fatorial de 7 é 3628800

Нет Exemplo Acima Fatorial () É STETADA UMA Função Recursiva Pois Chama ela Mesma. QUANDO Nós Chammos Essa Função Comm Um Inteiro Positivo, ELA Chamará Recursivamente Ela Mesma Diminuindo O Número. Para Entendermos Melhor, Veja o Cálculo que ocorre:

fatorial(4)              # Primeira chamada com 4
4 * fatorial(3)          # Segunda chamada com 3
4 * 3 * fatorial(2)      # Terceira chamada com 2
4 * 3 * 2 * fatorial(1)  # Quarta chamada com 1
4 * 3 * 2 * 1            # Retorno da quarta chamada, uma vez que y = 1
4 * 3 * 2                # Retorno da terceira chamada
4 * 6                    # Retorno da segunda chamada
24                       # Retorno da primeira chamada

COMO PODEM VER, NOSSA RECURSãO ACABA QUANDO O VALOR DE y редуз А 1 Essa É STETADA A База Кондисяса Отказ TODA Recursão Deve Ter UMA Condição Base Base Que Para recursão Ou Função Ficará Chamando-A Etrename.

Recursão Com Múltiplos Casos Base

COMO JA Vimos, UM Caso de Base ém um Cenário de Engremarto que Não USA Recursão Para Produzir UMA RESPOSTA, PODEMOS TER UM OU MAIS DESSES CENARIOS EM NOSSAS FUNCHõES.

Na Matemática, Sucessão de Fibonacci (OU SEXêNCIA de Fibonacci), É UMA Sequência de Números Inteiros, PORCHANDO NORMOLMENMENTE POR 0 E 1, NA QAL, CADA TERMO SOUSESTE соответствует Сома DOS DOIS Anderlees. Получение секвена oome do MateMático Italiano Leonardo de Pisa.

Fibonacci Modelou o Seguinte desafio:

  • CARES DE COELHOS RECÉM-NASCIDOS (UM MACHO E UMA FêMEA) SãO COLOCADOS EM UM CURLAL
  • Coelhos SE ACASALAM NA IDADE DUM MêS
  • Coelhos Them Um Mês de Período de Gestação
  • ASSINDO que o Coelho Nunca Morre, Fêmea Semper Produz UM NOVO PAR (UM MACHO E UMA FêMEA) CADA MêS Partir do Segundo Mês
  • Quantos Coelhos Fêmeas Estão Lá Нет окончательного доно-ано?

Фибоначчи Е.М. Питон

Vamos Então Definer O Solutea, Para Que Seja Mais Fácil Solucioná-Lo:

  1. Depois dum m ms (Chammos Ele de 0 ) fêmea
  2. Depois do Segundo Mês, Ainda 1 Fêmea (Agora Grávida)
  3. Депоис делает Терцеро, 2 Фемеас, 1 Гравида, 1 NãO-Grávida
  4. EM Geral, Temos Então fêmeas (n) (n-1) + fêmeas (N-2)

    • CADA FêMEA VIVA NO MêS N-2 ИРА ПРОДУЗИР UMA Fêmea Нет Mês n
    • ESTES PODEM SER SER ADICIONADOS AQUELES VIVOS NO MêS N-1 Para Obter Total Vivos Нет mês n

Temos Então OS Seguintes Casos:

  • База Casos:
    • Степень (0)
    • Степень (1)
  • Caso Recursivo
    • FEMEAS (N) (N-1) + FEMEAS (N-2)

Convertrodo Para a linguagem python:

def fib(x):
    """
    Assume x como inteiro >= 0
    Retorna o Fibonacci de x
    """
    if x == 0 or x == 1:
        return 1
    else:
        return fib(x-1) + fib(x-2)

print(fib(8)) # 34
print(fib(10)) # 89

Vantagens e desvantagens.

Vantagens DA Recursão:

  1. Funções Recursivas Tornam O Código Limpo E Elegante
  2. UMA TAREFA Compressa Complema Pode Ser Quebrada EM Sub-проблематики Усандо recursão
  3. Gerar Sequências é Mais Fácil Com Recursão

Desvantagens DA Recursão:

  1. Как Vezes a Lógica POR TRAS DELA PORE SER COMPULDA DE entender.
  2. Chamadas Recursivas São Custosas E INEFINGES E PODEM NOS COWNAR MUITA Memória E Tempo!
  3. Funções Recursivass São Mais Difíceis de debugar (Processo de Contractrar E Reduzir Defeitos de UM Programa).

Por Fim, Entendemos Que As Funções São Um Tema Essencial E Фундаментальный пункт Para Proprogressação, Elas São Capazes de Facilitar Muito A VIDA DOS Programadores Através Da abstração Tornando OS Códigos Muito Mais Elegantes, Modulares E Fáceis de Intender. O Código Ainda Pode Ser Utilizados Muitas Vezes e Precisa Ser Debuggado/Testado Апенас Ума Вес.

Проверьте Documentação зафиологический Python Para Conhecer Todas как Funções Construídas нет Интерпретатор Python.

Оригинал: “https://dev.to/theakira/funcoes-em-python-309”