Como si yo les dijera que el programa n=10, ¿cómo puedo hacerlo volver 10*9*8*7*6*5....1?

Pensé que un bucle while, pero creo que he metido la pata en alguna parte porque no suma todos los números en la secuencia.

Mi código actual se parece a esto

def product(n):
  i=n
  a=n-1
  while a>0:
    return i * a
    b=i * a
    a=a-1
    i=i-1

Hay mejores formas de hacerlo sin utilizar recursividad? Lo siento por la increíblemente principiante pregunta, pero estoy tratando de enseñar a mí mismo código. Tienes que empezar en alguna parte!

Gracias!

Sumar o multiplicar? PS eres returning primero en tu bucle…
multiplicar, ¿cómo puedo hacer que todo vuelva?
Cuando return no estás dejando que cualquiera del resto del código del bucle de ejecución, y que sólo está en bucle una vez.
por lo tanto, poner el valor de retorno fuera del bucle debería resolver esto? Estoy confundido acerca de cómo el bucle while es multiplicar todos los números. Como me siento con mi código actual, cada vez se repite que va a restablecer el valor, si eso tiene algún sentido.
Usted podría utilizar reduce si te gusta, pero si el objetivo es aprender que probablemente no es tan bueno. reduce(range(1, n+1), lambda a, b: a*b) O math.factorial

OriginalEl autor Billy Thompson | 2012-09-02

8 Comentarios

  1. 7

    Puesto que usted está tratando de aprender el código, no voy a dar una solución total, pero
    Te voy a dar un par de sugerencias lugar:

    • Tener un for bucle que se ejecuta desde 1 a n (utilizando range(1, n+1)) en lugar de su while-loop. Esto va a generar los valores que desea multiplicar y repetir la cantidad de veces (que puede ser un poco complicado con while bucles a veces).

    • Tiene una variable llamada product para almacenar el resultado de las multiplicaciones en cada iteración del bucle.

    • Inicializar product antes de entrar en el for-loop. Una vez dentro se le acaba de actualizar el valor de product.

    • Después de terminar el bucle, puede utilizar el return declaración a devolver el valor de product.

    • Finalmente, para propósitos de prueba, puede que desee comenzar con un pequeño valor de n, como 4, e imprimir los valores que son la informática dentro del bucle para comprobar cómo su código de trabajo.

    Hay más concisa y python maneras de hacer esto, pero para ello se utiliza el código de la estructura que ya han puesto en marcha. Y, por supuesto, de forma recursiva, así como los que usted menciona.

    Una vez que domines los fundamentos, usted podrá apreciar la más idiomáticas maneras de escribir esto, o llamando a las funciones apropiadas que hacer esto para usted.

    Gracias, voy a probar esto ahora mismo!
    bueno .. déjeme saber si usted tiene alguna pregunta/cómo es la cosa, creo que esto es más útil en el largo plazo que ver cómo llamar a funciones, o la obtención de una ya escrita de la solución.
    Ok se que hacer 🙂 Exactamente, quiero ser capaz de entender el método detrás de la locura antes de pasar las llamadas a las funciones.

    OriginalEl autor Levon

  2. 4

    Bien, he aquí otro Python el enfoque.

    >>> import operator
    >>> numbers = range(1, 11)
    >>> numbers
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> reduce(operator.mul, numbers)
    3628800
    Sí, pero cómo ayuda esto a OP aprender a programar? OP estados «estoy tratando de enseñarme a cómo el código». Esto muestra cómo llamar a funciones …
    Esto responde directamente a la pregunta indicada en el título. «cómo multiplicar todos los números en una secuencia»
    Desbordamiento de pila no es sólo para el OP, es también para las personas que llegan aquí, por ejemplo, una búsqueda en Google.
    Estoy de acuerdo con usted, ASÍ que no es sólo para el OP, pero esto pregunta es. Basado en OP puestos, dudo que ver reduce() etc va a ayudar OP. Supongo que todo el mundo intenta ayudar a su propia manera.
    Creo que esta es la mejor solución para el problema.

    OriginalEl autor FogleBird

  3. 2

    Suponiendo que lo que usted quiere decir es función factorial, usted puede simplemente utilizar el math.factorial():

    >>> import math
    >>> math.factorial(10)
    3628800
    Gracias, pero estoy tratando de entender la lógica detrás de los factoriales de los aspectos de la misma. Esto será muy útil, aunque.
    No creo que esto ayuda OP aprender a programar, sino más bien cómo llamar a las funciones.
    Mi respuesta incluye math.factorial así como un intento de mostrarle cómo ponerlo en práctica por su propia cuenta :-p
    Lo siento, no estoy de acuerdo. Creo que «cómo llamar a las funciones correctas» en lugar de implementar todo desde cero, es una parte importante de aprender a programar. Aprender a hacer este tipo de juicio es aún más importante. Además, el OP preguntó claramente si hay una manera más fácil de hacerlo «sin recursividad», y es allí. Dadas estas razones, no veo cómo mi respuesta merece un downvote.
    No he votada abajo un solo respuesta aquí .. simplemente porque me hacen comentarios no implica que .. así que por favor, no saltar a conclusiones. Tal vez a otros a encontrar su enfoque no es útil? Al menos una persona debe. Y usted no ayuda OP aprender a programar, pero utilizar el producto de otros programadores.

    OriginalEl autor K Z

  4. 2

    Usted está tratando de encontrar el factorial de un número n, esencialmente. Para encontrar el factorial de un número, hay 2 métodos

    1. El uso de una estructura de Bucle
    2. El uso de la Recursividad (como usted ha mencionado)

    Como un nuevo programador, usted estaría mejor con una simple estructura de bucle que va desde 1 a n, y pone el valor multiplicado en cada iteración en una variable. Esa variable es la respuesta. Pero también sabemos que la recursividad también el trabajo y hacer que el código se vea elegante. Disfrute De La Programación.

    OriginalEl autor asudhak

  5. 1

    Esto se llama el factorial. 10! es equivalente a 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1.

    def factorial(n):
        product = 1
        while n > 0:
            product *= n
            n -= 1
        return product

    Por la forma en que, en la práctica, sólo tiene que utilizar matemáticas.factorial.

    Woah, muchas gracias. Pero, estoy teniendo un poco de dificultad para su comprensión. ¿Qué hace el *= n hacer? Estoy asumiendo que permite a n a se multiplica por n-1? Pero, estoy teniendo problemas para envolver mi cabeza alrededor de ella, porque ¿por qué n tienda a sí mismo como n*(n-1) cada vez que se repite. Lo siento, es difícil para mí poner en palabras por qué es que me confunde.
    product *= n significa product = product * n; se multiplica el producto hasta el momento para cada n hasta que se llega a 0. n -= 1 es el mismo que n = n - 1, restando 1 cada bucle.
    en esencia, se cuenta hacia atrás desde n a 0, almacenando el resultado de su producto acumulativo en product.
    Gracias, ese tipo de ayuda a poner en perspectiva para mí. Yo sólo no se han introducido para que la sintaxis todavía. Voy a probar y comprender y aplicar ahora mismo.
    El compuesto de operadores de asignación son sólo de taquigrafía… no se siente estresado 🙂

    OriginalEl autor oldrinb

  6. 1
     def factorial(n):
         if n <= 1: return 1
         return n * factorial(n-1)

    Siempre pienso factorial como el ejemplo por excelencia en el aprendizaje de la recursividad …

    Sí, pero sólo estoy tratando de tener una idea de cómo hacerlo de forma iterativa, antes de pasar a la recursividad. Gracias por la respuesta.
    Trate de calcular factorial(1000) con este enfoque. :^)
    sí, yo sé que no funciona 😛 … por lo general lo hizo este ejercicio en C de la tierra que todavía tenía sus problemas, pero menos de lo que python para este problema
    El código de retorno factorial(-10) == 1 como True, mientras que el factorial de los números negativos es indefinido. Cuestión menor, pero aún así.
    Factorial es tan claramente implementado el uso de la iteración a través de la recursividad, creo que es el ejemplo por excelencia de contorsionado un problema de programación determinado tema.

    OriginalEl autor Joran Beasley

  7. 0

    Otra manera de hacer esto es utilizar scipy.product.

    >>> import scipy
    >>> scipy.product(xrange(1,11))
    3628800

    OriginalEl autor Akavall

  8. 0

    Como alumno debe hacerlo sin utilizar cualquier incorporado funciones que le ayudará a aprender a programar y no sólo como herramienta de aprendizaje es una herramienta que es mucho más fácil que ser buen programador. hay dos maneras de hacer esto, me han implementado versiones más sencillas.

    El Uso De Recursividad:

    def product(n):
        if n== 1:
            return 1
        return n * product(n-1)

    El Uso De Bucle Simple:

    def product(n):
        res = 1
        while n>1:
            res = res * n
            n = n - 1
        return res

    OriginalEl autor sharafjaffri

Dejar respuesta

Please enter your comment!
Please enter your name here