Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Programa recursivo que aceita um inteiro não negativo como entrada e exibe seus dígitos empilhados verticalmente

Desenvolver a função recursiva vertical(), que aceita um inteiro não negativo como entrada e exibe seus dígitos empilhados verticalmente. Por exemplo:

>>> vertical(3124)
3
1
2
4

Solução:

def vertical(n):
    if n< 10:
        print(n)
    else:
        vertical(n//10)
        print(n%10)

n = 3124
vertical(n)

Alguem poderia me explicar passo a passo como funciona a solução recursiva acima? Fiquei completamente perdido...

5 respostas
solução!

Edson,

Em programação, a recursividade é um mecanismo útil e poderoso que permite a uma função chamar a si mesma direta ou indiretamente, ou seja, uma função é dita recursiva se ela contém pelo menos uma chamada explícita ou implícita a si própria. Vejamos abaixo um outro exemplo iterativo em Python. No site da linguagem tem um exemplo muito bom deste tipo de função:

# Python 3: Fibonacci series up to n
def fib(n):
        a, b = 0, 1
        while a < n:
            print(a, end=' ')
            a, b = b, a+b
       #print()
fib(1000)

Fiz um video, rapido sem super produção usando a ferramenta de debugger online para vc ver os passos do seu programa.

Vídeo fazendo debugger do seu programa: vídeo

O site do debugger com o seu programa: pythontutor

@Welton Vaz de Souza : eu nao entendi especificamente a função

 vertical()

acima. Poderia me explicar?

Edson,

A função vertical() é uma função recursiva porque se chama no corpo da usa aplicação, se vc ver o vídeo que postei no Google Driver ou usando o PythonTutor vc vai entender melhor.

def vertical(n):
        if n< 10:
            print(n)
        else:
            vertical(n//10)
            print(n%10)

    n = 3124
vertical(n) 

1) Na realidade o seu programa começa na linha 9, com vertical()

2) Depois ele volta para a linha 1, onde se define o nome da função def vertical(n):, ela recebe um denominação vertical e um paramento n

3) O interpretador executa o if e faz um comparação n é menor que 10

  • Se verdadeiro (True) ele executa a linha 3: print(n)
  • Se falso (False) ele executa as linha 5: vertical(n//10) que é a recursão, pois ela chama a função novamente e executa n // 10 onde o resultado é 312 e volta para o passo 2(RECURSÃO) , até que o resultado seja menor que 10, quando ele é impresso na tela, e passa para o próxima n!

@Welton Vaz de Souza: Obrigado! O link do "site do debugger com o seu programa" não está funcionando. Teria como atualizar o link?