Francisco Joel Morando Pinedo
Shale... entender su letra a mano le agrega un grado más de dificultad
Carlos Enrique Ramírez Flores
de los pocos comentarios que me han hecho reir jajaja!!!
Gabriel Montes
jajajaja concuerdo con este comentario
La recursividad es la capacidad de una función de llamarse a si misma.
Las funciones recursivas tienen las siguientes caracteristicas.
Francisco Joel Morando Pinedo
Shale... entender su letra a mano le agrega un grado más de dificultad
Carlos Enrique Ramírez Flores
de los pocos comentarios que me han hecho reir jajaja!!!
Gabriel Montes
jajajaja concuerdo con este comentario
Usando ciclos:
#include <stdio.h> int factorial(int n) { int i, result; result = i = 1; while(n >= i) { result *= i; i++; } return result; } int main() { int num, result; printf("Introduce un valor: "); scanf("%d", &num); result = factorial(num); printf("El factorial de %d es %d", num, result); return 0; }
En el caso de este programa:
factorial.n que recibe como argumento, en cambio, con recursividad la función factorial es invocada n veces.Karina Romero
La diferencia esta en que al usar un loop la ejecución del código se completa en una sola llamada al método con sus variables locales, en cambio al utilizar la recursion este se llama a si mismo la cantidad de veces que sean necesarias creando una pila de variables locales por cada llamada al método. Ambos tienen sus propios enfoques.
Gabriel Rodriguez
Gracias, me ahorraste un dolor de cabeza que no podía resolver !
Matías Wasiak
Gracias!
Julián David Cubillos Ortegón
Adjunto reto: La diferencia de usar ciclos y la recursividad esta en el ahorro de recursos y ahorro de lineas de codigo, a la vez que permite que la aplicacion sea mas flexible.
#include <stdio.h> int main(int argc, char const *argv[]) { int i, n = 1, valor; printf("Que numero desea saber el valor factorial?: "); scanf("%d", &valor); for(i=1; i<=valor; i++) { n = n * i; } printf("El factorial de %d es: %d\n", valor, n); return 0; }
Karen Paola Diaz Duarte
RECURSIVIDAD: Es donde vamos resolviendo problemas desde la parte mas pequeña o problema pequeño hasta solucionarlo todo. RECURSION: es la capacidad que tiene una función de llamarse así misma dentro de su código
Int factorial(int n) //programa para hallar el factorial de n(numero ingresado) { If(n==0) //n es igual a cero? Si no es igual pasa a la operación (Return (nfactorial(n-1)); ) Return (1); // hasta que la operación llegue a cero, retorna un 1 para terminar Return (nfactorial(n-1)); // si n no es igual a cero realiza esta operación hasta llegar a cero } // fin del programa.
CICLOS: Int factorial(int n) { for(int i=1; i<=n; i++) result +=i; }
Diferencia de usar recursividad y un iteraciones en este programa: RECURSIVIDAD: Se llama a sí misma, o sea que puede reutilizar la misma línea de código. ITERACIONES: se entiende como un ciclo que se repite hasta que se termina, según las líneas programadas.
Francisco Joel Morando Pinedo
Aquí está explicado.
Sebastian Camilo Ariza Rodríguez
Esta clase del curso de Introducción al pensamiento computacional con Python también explica bastante bien este concepto de recursividad:
https://platzi.com/clases/1764-python-cs/25243-recursividad/
Luis Nilson Palma Campos
Recursividad usando el ciclo for
#include <stdio.h> #include <math.h> int fact =1; void recursividad(int n) { int acum,i; acum=n; for(i=0;i<acum;i++) { fact = fact * n; n--; } printf("Resultado de la Recursividad %d ",fact); } main (int argc ,char const *argv[]) { recursividad(10); return 0; }
Maria Alejandra Carrero
n = int(input('ingresa el valor para calcular su factorial: ')) factorial = 1 if n == 0 or n == 1: factorial = 1 else: for i in range(1, n + 1): factorial *= i print(i-1) print(f'{n}!= {factorial}')```
Maria del Rosario Castro
Hola Para complementar. Hay 4 grandes diferencias entre la recursión y la iteración
De igual forma, comparto mi código para el reto en python de iteración y les dejo el source de donde tomé la info.
def iteration(n): base = 1 for i in range(2, n+1): base *= i return base n = int(input("Escoja un número para encontrar su factorial: ")) print("Factorial of",n,"using iteration is:", iteration(n));
https://www.geeksforgeeks.org/difference-between-recursion-and-iteration/
Y claro, si alguien quiere corregir, le agradezco 🙂
Demetrio Cumplido Narciso
Mauricio Lopez Agudelo
Hay algo importante por explicar, y espero no estar equivocado. Cuando Ricardo habla de "Stack", se refiere ah que en el momento en el que el compilador pasa todo tú código a lenguaje ensamblador, el compilador al reconocer que se hace una llamada a una función, este guarda "registros necesarios" en un stack, para así no perder su valor actual, ya que no se cuenta con una cantidad infinita de registros, entonces piensa que en recursividad se cebe estar creando un nuevo stack cada que la función se llame a sí misma para almacenar los valores actuales y poder acceder a ellos más adelante, esto claro es mucho más costoso computacionalmente, ya que imaginate una función recursiva que se llame a si misma 100 veces.
Ricardo Celis
ProfesorAsí es, el stack es ese registro de la "profundidad" en la que de encuentra tu llamada recursiva, la realidad es que ahora en lenguajes de alto nivel como JS o muchos otros el motor sobre el que corren lo maneja, antes o en programas con C muchos exploits y huecos de seguridad podrían aparecer por descuidos de los programadores en cosas tan hardware specific como estas!
Juan Sebastián Agudelo
#include <stdio.h> #include <stdlib.h> int resultado = 1; int x, i; int main() { printf("Ingrese un numero para saber su factorial\n\n"); scanf("%d",&x); for( i = x ; i > 0; i--) { resultado *= i; printf(" %d %d\n", i, resultado); } }
Fernando Jesús Núñez Valdez
Grat!
Ivan E. Batista-Ochoa
¿El código escrito en la tableta no debería tener un else después del primer return?
Ivan E. Batista-Ochoa
Esto lo soluciona en la próxima clase cuando paso el código al IDE. Efectivamente se había pasado un else.
Juan Guillen Fortich
De hecho no es necesario porque si la condición del if llega a cumplirse no se ejecutaría el resto del código por el return.
francisco ecatl melo valle
python recursividad
def facto(num): if num == 0: return 1 else: return num * facto(num-1) if __name__ == "__main__": num = int(input("Que factorial quieres: ")) factorial = facto(num) print(factorial)
Python ciclo for
def facto(num): factorial = 1 for i in range(1,num+1): factorial *= i return factorial if __name__ == "__main__": num = int(input("Que factorial quieres: ")) factorial = facto(num) print(factorial)
Gean Carlo Reyes Alayo
Python usando ciclos
numero = int(input("---> ")) fact = 1 for i in range(1, numero + 1): fact = fact * i print(fact)
Dario Candia
Sebastian Heredia
Con la recursividad se puede ahorra un poco mas de lineas de codigo y sera mucho mas legible, aqui esta mi codigo en c++
#include<iostream> using namespace std; int main() { int Nfac = 1,num,i; cout<<"Digite el numero que desea conocer el factorial: "<<endl; cin>>num; for(i=1;i<=num;i++) { Nfac = Nfac * i; } cout<<"El factorial es: "<<Nfac; return 0; }
Wilson Erik Ramírez Franco
Gracias Sebastian! me guió tu código, después de 1 hora sin hallar solución.
Daniel Ramírez Castaño
La recursividad agiliza procesos y hace uso eficiente de los recursos de las computadoras, pero requiere habilidad mayor de abstracción de los problemas para diseñar su respectiva solución. Los ciclos son más intuitivos para las personas.
#include <stdio.h> void factorial(int n) { int ans = n, m = n; if (n == 0) { ans = 1; } else { while (n > 1) { n--; ans = ans * n; } } printf("El factorial de %d, es: %d\n", m, ans); } int main(int argc, char const *argv[]) { int no; printf("Ingrese valor para cálculo de factorial: "); scanf("%d", &no); printf("\n"); factorial(no); return 0; }
Les adjunto ambas formas (recursiva y ciclo for) en python:
Recursiva:
numero = input('Introduce un numero entero: ') n = int(numero) def factorial(n): if n == 0: return 1 elif n > 0: return n*factorial(n-1) print('El factorial de {} es:'.format(n),factorial(n))
Ciclo for:
numero = input('Introduce un numero entero : ') n = int(numero) if n == 0: fac = 1 elif n > 0: fac = 1 for i in range(1,n+1): fac *= i print('El factorial de {} es: {}'.format(n,fac))
Análisis... Me di cuenta que al introducir números de 4 dígitos (10^4) en la forma recursiva me da el siguiente error:
RuntimeError: maximum recursion depth exceeded
Según entendí al investigar un poco... Este error ocurre en python debido que tiene un límite de memoria para casos de recursión para evitar recursión infinitas, sin embargo, mediante el método sys.setrecursionlimit(10ˆn) podemos aumentar el número de dígitos.
Si alguien entiende mejor esto, favor de compartirlo. Muchas gracias!