Funciones: paso de parámetros por valor y por referencia

Anuncio
[
]
Departament
d’Informàtica
Departamento de Informática
Informática
PRÀCTICA 8
Curs 2002-2003
FACULTAT DE MATEMATIQUES
UNIVERSITAT DE VALENCIA
Práctica Nº 8: Funciones: paso de parámetros por valor y por referencia.
Recursividad
Objetivos de la práctica:
- Paso de parámetros por referencia en C++.
- Diferencias entre el paso de parámetros por valor y por referencia.
- Anidamiento de funciones.
- Uso de la recursividad.
Parámetros por valor y por referencia
Los parámetros de una función se pueden definir de dos maneras: Por valor o por referencia.
Paso por valor
Este método copia el valor de los argumentos sobre los parámetros formales, de manera que los cambios
de valor de los parámetros no afectan a las variables utilizadas como argumentos en la llamada.
Lo importante en el paso por valor es el valor del argumento, por eso es indiferente si este argumento es
una variable, una constante o una expresión.
Paso por referencia en C++.
A diferencia del paso por valor, en el paso por referencia los parámetros no copian el valor del
argumento, sino que comparten su valor. Por lo que cuando cambia el valor del parámetro también
cambia el valor de la variable utilizada como argumento en la llamada.
La forma de indicar un parámetro por referencia es anexar el símbolo & al final del nombre de la variable
de tipo en la lista de parámetros formales, tanto en el prototipo de la función como en el encabezado de su
definición.
Ejemplo:
void obtener_entrada (double &temperatura)
{
cout << “Dame una temperatura en grados centígrados \n”;
cin >> temperatura;
}
La llamada a la función desde el programa principal:
Obtener_entrada (temperatura);
Los parámetros definidos por referencia se pueden utilizar tanto de entrada como de salida de datos. Este
es el otro mecanismo que poseen las funciones, a parte del return, para devolver valores.
Una consecuencia evidente es que, en la llamada de la función, los argumentos por referencia han de ser
siempre variables.
Práctica Nº 8: Funciones: paso de parámetros por valor y por referencia. Recursividad
1/2
[
]
Departament
d’Informàtica
Departamento de Informática
Informática
PRÀCTICA 8
Curs 2002-2003
FACULTAT DE MATEMATIQUES
UNIVERSITAT DE VALENCIA
NOTAS:
• En una misma función podemos utilizar parámetros por valor y parámetros por referencia.
• Utilizar el paso por referencia si queremos que la función modifique el valor de la variable y en
caso contrario usar paso por valor.
• Cuando una función ha de devolver más de un valor es normal devolverlos mediante el uso de
argumentos de la función pasados por referencia.
Funciones que llaman a funciones
Un cuerpo de función puede contener una llamada a otra función. La situación en este tipo de llamadas es
exactamente la misma que si la llamada de función se hubiera efectuado en la función main del
programa; la única restricción es que el prototipo debe aparecer antes de que se emplee la función.
Recursividad
Una función recursiva es aquella que se llama a sí misma. Esto se traduce en que dentro del código de un
subprograma recursivo hay una sentencia o expresión donde aparece la llamada a la misma función.
Para no crear secuencias de infinitas llamadas (ya que la función llamada, volverá a llamarse por ser a su
vez recursiva) necesitamos dos elementos:
1. Las funciones recursivas deben tener argumentos, cuyos valores diferencien a una llamada de
otra.
2. Debe existir una condición final o condición de parada, que utiliza la información de los
argumentos para verificar si la recursión debe finalizar, en cuyo caso no se producen más
llamadas.
Evidentemente la secuencia de valores de los argumentos debe ser tal que se garantice que en algún
momento se llegue a la condición final de la recursión. De no ser así, se producirá un error de
Desbordamiento de Pila (Stack Overflow) que indica que las llamadas recursivas han saturado la
memoria de la pila del programa.
La recursividad está directamente relacionada con una técnica de programación llamada Divide y
Vencerás, de tal manera que esta técnica nos puede ayudar a descubrir la forma que debe tener nuestra
función recursiva. Esta técnica se basa en lo siguiente: frente a un problema, se realizan una serie de
tareas básicas que nos llevan a tener el mismo problema pero de complejidad menor. Si esto lo aplicamos
recursivamente, la resolución del problema se traduce en ejecutar una serie de tareas simples que nos
desembocan al final en el mismo problema pero de una complejidad tan simple que es trivial resolverlo.
Esta resolución se hace en la condición final de la recursión y se denomina Caso Base.
Práctica Nº 8: Funciones: paso de parámetros por valor y por referencia. Recursividad
2/2
Descargar