You are on page 1of 10

Definicin recursiva de una funcin

Aqu estn los dos elementos clave de una definicin de funcin recursiva:
La definicin de funcin contiene uno o ms valores especficos de la funcin.
Por ejemplo, la definicin factorial f (n) : if (n 0,1, n. f ( n 1) declara explcitamente el valor de f
cuando n es 0. La definicin dice "si n es 0 devuelve 1."
f (0) 1

Para argumentos distintos a los especificados, el valor de la funcin en ese argumento se expresa en
trminos de la funcin evaluada en un argumento diferente.

Considerando de nuevo la funcin factorial f (n) : if (n 0,1, n. f ( n 1)


Hemos especificado que si n no es 0, entonces el valor de f (n) est dado por

El valor de n veces el valor de f en un valor diferente de n, es decir n - 1.

Entonces, cmo puede esto funcionar? Vamos a caminar a travs de cmo f evala f (6) 720

Detrs de las escenas, tenemos la siguiente secuencia de pasos

60 As f (6) 6*f(5) y tenemos que evaluar f (5)

50 As f (5) 5*f(4) y tenemos que evaluar f (4)

40 As f (4) 4*f(3) y tenemos que evaluar f (3)

30 As f (3) 3*f(2) y tenemos que evaluar f (2)

2 0 As f (2) 2*f(1) y tenemos que evaluar f (1)

1 0 As f (1) 1*f(0) y tenemos que evaluar f (0)

0 0 Y as sabemos f (0) 1

Cuando la recursin va mal

As es como funciona la recursin. El valor deseado se expresa en trminos de otros valores de la funcin.
Este proceso se repite hasta que se alcanza un valor conocido. La secuencia se invierte entonces,
construyendo una lista de valores de funcin calculados hasta que volvamos a la que buscamos.

Ahora es una pregunta importante. Con nuestra funcin factorial como se defini anteriormente, qu
pasara si evaluramos f ( 2) ?

Puesto que -2 no es 0, el valor est dado por f (2) 2*f(3) pero -3 no es 0 as que
f (2) 2*f(3. f (4))

Y as f (2) 2*f(3. f (4. f (5))) "..."


El argumento a f es mayor en la direccin negativa. Nunca vamos a hacer una solicitud para f
(0), que es el nico valor que conocemos! As, escribir f (-2) = har que Mathcad ejecute un
tiempo infinitamente largo! Vamos a intentarlo!
f (2) ?

Se detuvo y dio un mensaje de error, que es probablemente lo mejor. Este es el por


qu.
Hay mucha contabilidad involucrada en la evaluacin de una funcin recursivamente
definida. El contador interno de Mathcad tiene que hacer un seguimiento de todas las
expresiones como

5*f(4)

4*f(3)

Y as sucesivamente hasta que se alcanza un valor conocido. Para realizar un


seguimiento de todas estas llamadas de funcin anidadas, Mathcad coloca
informacin en un rea interna conocida como la pila. Si la pila se llena antes de que
se pueda determinar un valor, la pila se desborda y se emite un mensaje de error.
Tenga en cuenta que establecemos un lmite artificial en el tamao de pila que evitar
que se alcance este lmite antes de que Mathcad se apodere. En nuestro ejemplo, la
pila tuvo que llenarse porque diseamos una funcin que se mantuvo llamndose sin
fin. No importa cun grande sea la pila, eventualmente superaramos su capacidad.
Este ejemplo de un desbordamiento de pila es un ejemplo de una buena definicin ido
mal. La funcin funciona, solo tiene que asegurarse de conectar el argumento
correcto, un entero> 0. La funcin siguiente es una funcin recursiva mal definida,
desbordar la pila para cualquier valor de x diferente de 1.

La moraleja de la historia:
Al definir una funcin recursivamente, asegrese de que una de sus condiciones de parada se cumpla en
ltima instancia para el tipo de entradas que desea introducir. Si obtiene mensajes de error para la
mayora de las entradas que intenta, probablemente haya un problema con su definicin.

Con nuestra funcin factorial f (n) : if (n 0,1, n. f (n 1) estamos substrayendo


repetidamente 1 del argumento. Si n comienza como un entero positivo, el proceso de
sustraer 1 dar lugar a 0, lo que detendr la recursin.
Otro punto con respecto a los desbordamientos de pila. Incluso una funcin recursiva
bien definida puede producir un desbordamiento de pila para una buena entrada. La
funcin One(n) : if (n 0,1, One(n 1)) es una manera elegante de definir una funcin
que siempre devuelve un valor de 1.

One(2) : 1 One(0.3) : 1 One(1.5) : 1

Si calculamos One(50000) : ? desbordamos la pila porque le estamos pidiendo al tenedor de libros de


Mathcad que siga la pista de demasiada informacin.

Recursividad y definiciones anteriores

Por conveniencia, Mathcad asumir que una referencia de funcin es recursiva si no hay definiciones
anteriores de ese nombre. Si Mathcad encuentra una definicin anterior, har referencia (enlazar) a esa
definicin anterior en el lado derecho y crear una nueva definicin del nombre. Esto significa que si
existe alguna definicin anterior, una funcin recursiva ya no es recursiva. Por ejemplo, si reutiliza uno de
los nombres de funciones incorporados de Mathcad, har referencia a la funcin incorporada, en lugar de
crear una definicin recursiva. Esto es til si el punto fue, de hecho, para redefinir una funcin Mathcad,
como la modificacin de la funcin sin para interpretar los argumentos en trminos de grados.

cos(30) 0.154
cos( x) cos( x.deg)
cos(30) 0.866

De forma similar, si no te gusta el rango de ngulos devueltos por la funcin arg,


puedes definir

Y la recursin no entrara en la imagen. Pero esto puede resultar confuso, por lo que es posible que desee
modificar los nombres de las funciones, tal vez mediante su uso en maysculas.

Algunos ejemplos pasados


Cerramos esta seccin con algunos ejemplos ms de recursin en accin. Se pueden encontrar ejemplos
ms complicados en la seccin Ejemplos de programacin de Mathcad.
x x
La funcin appsin(n) : if (0 x 0, x, 2.appsin( ). 1 app sin( ) 2 da una aproximacin a
2 2
la funcin sin:

appsin(0.3) : 0.296 sin(0.3) : 0.296 appsin( ) : 1 sin( ) : 1 x : 3, 2.9...3
2 2
La funcin Decimal a continuacin utiliza la recursividad para encontrar la parte decimal de un nmero
restando o aadiendo 1 hasta que slo quede la parte decimal.

Decimal (x) devuelve ese nmero r entre 0 y 1 tal que x = n + r donde n es un entero.
Esta funcin siguiente Nx cuenta el nmero de apariciones del nmero x en la matriz A. Por
conveniencia definimos una funcin que elimina la primera columna de A:

Ver ms usos de la recursin en la seccin Ejemplos de programacin en Mathcad.


FUNCIONES Y OPERADORES

If and Until Si y hasta

Esta sentencia if es una forma de cambiar los resultados en una sola regin. Se escribe como una funcin,
aunque no es realmente, ya que es discontinua y condicional. Observe que la funcin / instruccin if es
diferente de la instruccin if dentro de los programas de Mathcad. La funcin if puede actuar
independientemente:

O puede ser til en definiciones de funciones tales como

Puede utilizar la funcin if para buscar a travs de una serie de nmeros y registrar slo el ndice de los
que desea, al igual que la funcin de coincidencia de Mathcad. El siguiente ejemplo encuentra la primera
aparicin de un valor en el vector y que es mayor que 0.75.

Operadores booleanos
Acerca de los operadores booleanos

Los operadores booleanos se utilizan para definir y evaluar expresiones booleanas. Las
expresiones booleanas son expresiones cuyo resultado es verdadero o falso. Por ejemplo, la
expresin booleana 1> 2 es falsa. Al evaluar esta expresin, el resultado es 0:

1 2 0
Al evaluar una declaracin verdadera, el resultado es 1:
sin(90) 1
El primer operador en la expresin anterior es igual a operador y el segundo es el operador de evaluacin.

Operadores de comparacin
Puede comparar expresiones matemticas vlidas utilizando los siguientes operadores: =, , <, ,>, .
Aparte de , puede utilizar estos operadores para especificar restricciones en bloques de resolucin.
La evaluacin se controla mediante un ajuste en la pestaa Clculo, en el grupo Configuracin de hoja de
clculo. En la lista Opciones de clculo, puede alternar el ajuste de Igualacin aproximada.
Puede representar dos expresiones booleanas conectadas con el operador AND, tales como (1 <x) (x
<3), por la nica expresin booleana 1 <x <3. La cadena de relaciones es de longitud arbitraria y puede
consistir de cualquier Operadores de comparacin para que:
A <b <c> d> e se evala como (a <b) & (b <c) & (c> d) & (d> e).

Operadores lgicos
Los operadores lgicos tratan cualquier valor numrico que no sea 0 como verdadero, incluyendo
nmeros complejos. Por ejemplo:
3i ^ 2i = 1

Operacin booleana en cadenas


Una de las cosas interesantes acerca de los operadores booleanos en Mathcad es que trabajan en cadenas.
Una cadena es mayor que otra cadena si su posicin en orden alfabtico es mayor.

Esta funcionalidad ofrece algunas formas nicas de buscar, ordenar y ordenar alfabticamente los datos
en formato de cadena, o puede utilizarse para crear y organizar nombres de archivos para escribir datos.
Adems, las cadenas y los nmeros se pueden mezclar en matrices, y las funciones incorporadas de la
bsqueda se pueden utilizar para emparejar secuencias por la misma lgica que arriba.

INSIDE MATHCAD - PROGRAMACIN


La Operacin Incluir Hoja de Trabajo

Introduccin
Echa un vistazo a las declaraciones que siguen.

La declaracin que comienza con el smbolo

Es una referencia a otra hoja de clculo que contiene la nueva constante y la funcin
que se muestra debajo de la referencia. Una vez que se inserta una hoja de clculo de
inclusin en el documento junto con la ruta de acceso al archivo Mathcad especificado,
todos los contenidos de la hoja de clculo referenciada estn disponibles en la hoja de
clculo que contiene.

Si busca en el archivo de referencia anterior, que puede hacer haciendo doble clic en
la referencia, ver las siguientes declaraciones:

Y as es como estas cantidades llegaron a estar en este archivo. Dado que el


contenido del archivo externo se carg al principio de este archivo, fueron
inmediatamente accesibles en esa posicin en la hoja de clculo.
No entraremos en los detalles de cmo utilizar la caracterstica Incluir Woreksheet
(puede consultar la documentacin de Mathcad para ello), pero le diremos cmo
funciona y le mostraremos algunos usos recomendados. En primer lugar, sin embargo,
hacemos la pregunta: "Por qu la funcionalidad Incluir Hoja de Trabajo forma parte
de un captulo sobre programacin?" Como vern en los ejemplos, algunos usos de la
referencia parecern muy similares a la programacin. Adems, esta nocin de
inclusin aparece en los lenguajes de programacin. Muchos programas principales en
el lenguaje de programacin C comienzan con declaraciones como
#include <stdio.h>
#include <math.h>
Lo que estas afirmaciones hacen es poner las funciones seleccionadas a disposicin del programa. Por
ejemplo, la inclusin del archivo math.h permite al programador utilizar funciones como sin y cos en sus
programas. Sin la inclusin, estas funciones se marcaran como indefinidas. Esto es muy similar a la
capacidad de inclusin de Mathcad.

Ahora a algunos ejemplos.

Cmo funciona la referencia


La funcin Incluir hoja de clculo funciona muy parecida a lo que se conoce como regiones de sombra.
Las regiones estn ah, simplemente no las puedes ver, como una zona colapsada. Esquemticamente, si
su documento parece

Con una hoja de clculo incluida en medio de algunas expresiones, y el documento


que se incluye se ve as:

Entonces el primer documento se comporta exactamente igual que el documento que habra tenido si
hubiera introducido el contenido del documento incluido en el punto de la referencia. Es decir, el
documento se vera como
Un ejemplo muy simple que lleva a casa este punto est contenido en las tres declaraciones a
continuacin:

El archivo que se incluye contiene una instruccin que hace que esta secuencia de
sentencias sea la misma que

Veamos ahora ejemplos de algunos usos prcticos de la referencia.


Ejemplos de uso de referencia

Ejemplo 1: Un buen uso de una referencia es cargar constantes cientficas o matemticas necesarias para
su trabajo.

Por ejemplo, la referencia de archivo

Nos da acceso inmediato a

Ejemplo 2: Otro buen uso de la referencia es agregar unidades usadas con frecuencia. Por
ejemplo, Mathcad contiene las siguientes unidades de tiempo:

Un archivo debidamente construido podra agregar ms a esta lista,


Como

Ejemplo 3: Una referencia puede usarse como un programa en s. Mire la siguiente secuencia de
declaraciones:

El documento al que se hace referencia, coeffs.xmcd, contiene una secuencia de expresiones que operan
sobre una matriz M para producir los coeficientes del polinomio caracterstico de M.

Si tuviera que mirar coeffs.xmcd de forma independiente, encontrara un documento con clculos
dependiendo de M donde M est marcado como indefinido. Las expresiones concluyen con una
asignacin de los clculos a la variable Coeffs.

De esta forma, puede llamar al documento coeffs.xmcd definiendo M y haciendo referencia al archivo.

Este es un uso interesante de la caracterstica de referencia, pero no muy recomendable. En primer lugar,
no sabes qu variables se estn utilizando dentro de coeffs.xmcd y por lo que la inclusin puede
sobrescribir algunas de las tuyas. En segundo lugar, no ver ningn mensaje de error que las sentencias de
la hoja de clculo incluida pueden generar si comete un error al utilizarlo.

La mayora de las veces usted usar una referencia como en el siguiente ejemplo.

Ejemplo 4: El archivo que se incluye a continuacin contiene una definicin de funcin,

En realidad ms de un operador, para calcular una variacin de la operacin habitual de


producto punto. Este producto se calcula utilizando el punto ms grande. Para los vectores que
contienen slo valores reales, este producto