Python - Division recursiva

 
Vista:
sin imagen de perfil

Division recursiva

Publicado por Marta (3 intervenciones) el 20/10/2019 10:51:28
Hola,

tengo una duda sobre como dividir un número entre números primos

por ejemplo

quiero dividir 80

80|2
40|2
20|2
10|2
5 |5
1

el resultado final seria (2,2,2,2,5)



primer veo si un numero es o no primo

1
2
3
4
5
6
7
8
9
10
def isPrime(num):
     if num < 1:
        return False
    elif num == 2:
        return True
    else:
        for i in range(2, num):
            if num % i == 0:
                return False
        return True


ahora hago la división, que esta MAL

1
2
3
4
5
6
7
8
9
def dividir(numero):
   lista=[]
   for i in range(2, numero + 1):
       if isPrime(i):
           if numero % i == 0:
               lista.append(i)
               numero=numero//i
    return dividir(mumero)
    return (lista)

¿Alguien me puede ayudar?
gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 1.428
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Division recursiva

Publicado por joel (248 intervenciones) el 20/10/2019 11:58:43
Hola Marta, seria algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
lista=[]
def miFuncion(numero):
    for i in range(2,numero+1):
        if numero%i==0:
            numero=numero//i
            lista.append(numero)
            break
 
    if numero>1:
        return miFuncion(numero)
 
miFuncion(80)
print(lista)

Esto devuelve:
1
[40, 20, 10, 5, 1]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.305
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Division recursiva

Publicado por tincopasan (393 intervenciones) el 20/10/2019 12:34:12
hola:

una posible solución:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
lista=[]
 
def divide(numero):
    if numero == 1:
        return lista
 
    elif not isPrime(numero):
        if numero % 2 == 0:
            numero = numero //2
            lista.append(2)
            return  divide(numero)
        elif numero % 3 == 0:
            numero = numero //3
            lista.append(3)
            return  divide(numero)
    else:
        lista.append(numero)
        numero = numero // numero
        return divide(numero)
 
print(divide(80))

se puede modificar para simplificar, pero quice dejarlo lo más entendible posible de leer.


Joel:
veo dos cosas en tu código:
1) no estás usando recursividad
2) la lista difiere, ya que estás mostrando los dividendo y no el divisor

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 1.428
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Division recursiva

Publicado por joel (248 intervenciones) el 20/10/2019 13:37:17
Hola Tincospan, si tiene recursividad!!...
aunque yo no utilizaría la variable lista que es externa a la función... creo que seria mejor algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def miFuncion(numero, lista):
    if numero==1:
        return lista
 
    for i in range(2,numero+1):
        if numero%i==0:
            numero=numero//i
            lista.append(numero)
            break
 
    return miFuncion(numero,lista)
 
result=miFuncion(80, [])
 
print(result)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.305
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Division recursiva

Publicado por tincopasan (393 intervenciones) el 20/10/2019 14:33:06
seguramente me exprese mal, no tiene recursividad en cuanto a que nunca estás llamando a la función isPrime(), solo invocas a miFuncion()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 1.428
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Division recursiva

Publicado por joel (248 intervenciones) el 20/10/2019 20:33:39
Si, si, tienes toda la razón Tincopasan!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Division recursiva

Publicado por Marta (3 intervenciones) el 20/10/2019 19:28:56
Muchas gracias por la respuesta.
pero la función debe de dividir cualquier numero que pongas.

si por ejemplo pones 100

100|2
50 |2
25 |5
5 |5
1

el resultado debería de ser (2,2,5,5)

al cargar el scrips con 100 me sale None


de ahi que pusiera lo de

for i in range(2, numero + 1):

para ir dividiendo por cualquier numero i primo

pero me da error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 1.428
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Division recursiva

Publicado por joel (248 intervenciones) el 20/10/2019 20:33:21
Lo he puesto para que te devuelve el divisor...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def miFuncion(numero, lista):
    if numero==1:
        return lista
 
    for i in range(2,numero+1):
        if numero%i==0:
            numero=numero//i
            lista.append(i)
            break
 
    return miFuncion(numero,lista)
 
result=miFuncion(100, [])
 
print(result)

Devuelve [2, 2, 5, 5]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Division recursiva

Publicado por Marta (3 intervenciones) el 20/10/2019 21:34:45
ok. muchas gracias a todos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar