Come scrivere una relazione di ricorrenza adatta per una funzione python?

1

Ho un esercizio in cui sono obbligato a costruire una funzione ricorsiva che prende un numero naturale e restituisce "Vero" se è divisibile per 3, o "Falso" altrimenti, usando la regola della 3-divisibilità. Poi mi è stato chiesto di scrivere una relazione di ricorrenza di questa funzione. La funzione che ho scritto è:

def divide3(n):
    i=0
    while i in range(0,len(str(n))-1):
        if (sum(n, i))%3==0:
            if (divide3(int(str(n)[i+1:])))==True:
                return True
            else:
                return False
        continue

Quello che non capisco è come dovrei scrivere una relazione di ricorrenza n-dipesa, se il numero di operazioni che faccio è correlato al numero di cifre in n, e non ha nulla a che fare con n stesso. Gradirei qualsiasi aiuto in materia.

    
posta Meitar 29.04.2015 - 18:04
fonte

1 risposta

3

Ci dispiace, ma il tuo codice non funziona affatto e non ha assolutamente senso. Se entra nel ciclo, viene immediatamente ucciso da un errore. Hai provato anche tu? Suggerirei di ottenerlo correttamente invece di cercare di creare una relazione di ricorrenza per qualcosa di rotto. Oppure ti hanno chiesto la relazione di ricorrenza perché hanno visto il tuo codice e non avevano idea di cosa stavi facendo, quindi questo è il loro modo di farti spiegare?

Che cos'è "la regola della 3 divisibilità" ? Vuoi dire che un numero è divisibile per 3 se e solo se la sua cifra è? Se è così, allora questo ti dice direttamente cosa fare: quando ti viene chiesto se un numero è divisibile per 3 e non lo sai subito, chiediti se la somma delle cifre è divisibile per 3. Se che il numero è ancora troppo grande per vederlo direttamente, chiediti se la somma delle cifre di quel numero è divisibile per 3. E così via.

Implementazione diretta quindi:

def divide3(n): return n in (0, 3, 6, 9) if n < 10 else divide3(sum(map(int, str(n))))

Bit più interessante:

def divide3(n): return n in (0, 3, 6, 9) if n < 10 else divide3(n//10 + n%10)

(Mi scuso per la formattazione, non so come spoilerizzare il codice.)

    
risposta data 30.04.2015 - 04:04
fonte

Leggi altre domande sui tag