Dev - C++ - Factorial recursivo usando un procedimiento

 
Vista:
Imágen de perfil de Juan Manuel
Val: 38
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Factorial recursivo usando un procedimiento

Publicado por Juan Manuel (21 intervenciones) el 08/06/2019 23:35:20
Saludos

Tengo un problema al cambiar una función factorial a un procedimiento

Esta es la funcion

1
2
3
4
5
6
7
int factorial (int n)
{
	if(n==0)
	return 1;
	else
	return n * factorial (n-1);
}

Pero al intentar usar un void me da un error

1
2
3
4
5
6
7
void factorial (int n, int &f)
{	int x;
	if(n==0)
	f=1;
	else
	f=n*factorial(n-1,f);
}

¿Podrían ayudarme a saber en que me equivoco?
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 Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Factorial recursivo usando un procedimiento

Publicado por Alfil (1444 intervenciones) el 09/06/2019 08:25:51
1
2
3
4
5
6
7
int FactorialRecursivo( int n ) {
    if (n <= 1)
        return 1;
     else
        return n * FactorialRecursivo( n-1 );
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Juan Manuel
Val: 38
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Factorial recursivo usando un procedimiento

Publicado por Juan Manuel (21 intervenciones) el 09/06/2019 17:30:00
gracias por tu respuesta pero yo quería devolver el factorial como un valor por referencia
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 Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Factorial recursivo usando un procedimiento

Publicado por Alfil (1444 intervenciones) el 09/06/2019 21:06:54
No parece que tenga mucho sentido devolver un valor por referencia, ya que al ser por referencia no precisa ser devuelto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Juan Manuel
Val: 38
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Factorial recursivo usando un procedimiento

Publicado por Juan Manuel (21 intervenciones) el 09/06/2019 21:56:40
Lo mismo dije pero me pidieron que lo pase por referencia como un ejercicio para manejar mejor la recursividad como procedimiento.
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 Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Factorial recursivo usando un procedimiento

Publicado por Rodrigo (539 intervenciones) el 10/06/2019 03:01:36
Tienes 2 casos: n es 0 o 1 y f es facil: es 1.
Sino, define una nueva variable, f2, invoca la funcion recursivamente con n-1 y f2.
Con eso en f2 vas a tener el resultado de (n-1)!
asi que f se puede actualizar multiplicando n por el resultado que f2 tenga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 160
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Factorial recursivo usando un procedimiento

Publicado por Andrés (53 intervenciones) el 10/06/2019 03:32:31
https://stackoverflow.com/questions/33923/what-is-tail-recursion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
void factorial(int,  long int &);
 
int main() {
 
  long int f = 1;
  factorial(5, f);
  cout<<f<<endl;
 
  return EXIT_SUCCESS;
 
}
 
void factorial(int n, long int &fact) {
 
 if(n > 1) {
   fact *= n;
   factorial(n-1, fact);
 }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar