Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Por que as seguintes funções do python estão retornando "None" mesmo com o "return" incluído dentro da função?

+2 votos
50 visitas
perguntada Mar 28 em Programação Computacional por Stuart Mill (1,099 pontos)  

Os dois outputs retornam 'None'.
Imagino que seja um problema semelhante para os dois casos...

1 - Primeira função:

 def add(x,y):
    if(y==0):
        return x
    else:
        add(x+1,y-1)
print(add(5,4))

2 - Segunda função (raiz digital):

def n2vector(n):
    strn = str(n)
    vetlet = []
    for letra in strn:
        vetlet.append(int(letra))
    return vetlet


def rd(n,soma=0):
    vet = n2vector(n)
    #print(vet)
    for i in vet:
        soma = soma+i
        #print(soma)
    if(soma>9):
        rd(soma)
    else:
        return soma

print(rd(567))
Compartilhe
comentou Mar 28 por danielcajueiro (5,666 pontos)  
Obrigado por chamar a atenção disso. Realmente, é um erro sutil. Se não executar, é difícil de perceber. Sem o return fora, dá até para fazer print, mas o valor não sai.

1 Resposta

+2 votos
respondida Mar 28 por Stuart Mill (1,099 pontos)  
selecionada Mar 28 por danielcajueiro
 
Melhor resposta

Faltou adicionar o 'return' para o caso que a função se chama de novo recursivamente.
Códigos corrigidos:

def add(x,y):
    if(y==0):
        return x
    else:
        return add(x+1,y-1) #Retorna o valor da recursão
print(add(5,4))

def n2vector(n):
    strn = str(n)
    vetlet = []
    for letra in strn:
        vetlet.append(int(letra))
    return vetlet


def rd(n,soma=0):
    vet = n2vector(n)
    #print(vet)
    for i in vet:
        soma = soma+i
        #print(soma)
    if(soma>9):
        return rd(soma) #Retorna o valor da recursão
    else:
        return soma

print(rd(567))
...