Entonces, tengo que hacer una función con devuelve una lista de n a 1 donde n se dividirá por 2 y se agregará a una lista, luego el número con se dividió por 2 se multiplicará por 3 y se resumirá por 1. Esto continuará naturalmente hasta que llegue al número 1. El código que tengo hasta ahora:

def Gaus(n):
    list = []
    if n%2 == 0:
        list.append(n/2)
    else:
        list.append((n*3)+1)
    return list

Entonces Gaus (30) debería devolver: [15,46,23,70 ...., 2]

Soy nuevo aquí en el desbordamiento de pila, lo siento si mi forma de preguntar no es lo suficientemente clara. ¡Gracias!

0
Andrea 14 may. 2016 a las 23:45

3 respuestas

La mejor respuesta

Si entiendo su pregunta correctamente ... esta es una implementación recursiva:

def gaus(n, ls = list()):
    if n == 1:
        return ls
    else:
        ls.append(n / 2.)           # Step 1:  n / 2
        ls.append(ls[-1] * 3 + 1)   # Step 2: (n / 2) * 3 + 1
        return gaus(n - 1, ls)

print gaus(30)

El resultado es esta lista:

[15.0, 46.0, 14.5, 44.5, 14.0, 43.0, 13.5, 41.5, 13.0, 40.0, 12.5, 38.5, 12.0, 37.0, 11.5, 35.5, 11.0, 34.0, 10.5, 32.5, 10.0, 31.0, 9.5, 29.5, 9.0, 28.0, 8.5, 26.5, 8.0, 25.0, 7.5, 23.5, 7.0, 22.0, 6.5, 20.5, 6.0, 19.0, 5.5, 17.5, 5.0, 16.0, 4.5, 14.5, 4.0, 13.0, 3.5, 11.5, 3.0, 10.0, 2.5, 8.5, 2.0, 7.0, 1.5, 5.5, 1.0, 4.0]

Editar :

def print_gaus(n):
    if n == 1:
        return
    else:
        if n % 2 == 0:
            print (n / 2),
            print (n / 2 * 3 + 1),
            print_gaus(n / 2 * 3 + 1)
        print_gaus(n - 1)

print print_gaus(30)

Pero tenga en cuenta que se romperá debido a la máxima profundidad de recursión de su entorno.

0
Darius M. 15 may. 2016 a las 15:28
def fun(num):
    n = num
    l = list()
    while n>1:
        r = n/2
        l.append(r)
        n = r
    return [i*3+1 for i in l]

Si entiendo tu pregunta correctamente, esto resolverá

1
P. Dev 14 may. 2016 a las 21:00

¡Quise decir esto y funciona !:

def Gaus(n):   
    list = []
    list.append(n)
    if n > 0 and n == int(n): 
        while n != 1:
            if n % 2 == 0:
                n = n/2
                list.append(n)
            else:
                n = (n*3)+1
                list.append(n)
        return list
    else:
        print "The given input number is not a natural number, try again!"
0
Andrea 13 jun. 2016 a las 13:10