TRANFORMAR ALGORITMOS RECURSIVOS A ITERATIVOS
El concepto de recursividad va ligado al de repetición. Son recursivos aquellos algoritmos que, estando encapsulados dentro de una función, son llamados desde ella misma una y otra vez, en contraposición a los algoritmos iterativos, que hacen uso de ciclos while, do-while, for, etc.
Algo es recursivo si se define en términos de sà mismo (cuando para definirse hace mención a sà mismo). Para que una definición recursiva sea válida, la referencia a sà misma debe ser relativamente más sencilla que el caso considerado.
Ejemplo: definición de nº natural:
→ el N º 0 es natural
→ El Nº n es natural si n-1 lo es.
En un algoritmo recursivo distinguimos como mÃnimo 2 partes:
a). Caso trivial, base o de fin de recursión:
Es un caso donde el problema puede resolverse sin tener que hacer uso de una nueva llamada a sà mismo. Evita la continuación indefinida de las partes recursivas.
b). Parte puramente recursiva:
Relaciona el resultado del algoritmo con resultados de casos más simples. Se hacen nuevas llamadas a la función, pero están más próximas al caso base.
CODIGO RECURSIVO
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
class cap_recursivo
{
public float capital(float m, int n, float x)
{
if (n == 0)
{ return m; }
else
{ return capital(m, n - 1, x) * (1 + (x/100)); }
}
}
public Form1()
{
InitializeComponent();
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
cap sayo = new cap();
label4.Text = int.Parse(sayo.capital());
}
private void label4_Click(object sender, EventArgs e)
{
}
}
}
DISEÑO
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication7
{
public partial class Form1 : Form
{
class cap
{
public float capital(float m, int n, float x)
{
if (n == 0)
{ return m; }
else
{
//x = x / 100;float inn;
//x = x * m;
x = x / 100;
for (int b = n; b > 0; b--)
{
m = m + (x * m);
//m = x + m;
//n = n - 1;(m ) +
}
} return m;
//return capital(m, n - 1, x) * (1 + (x / 100)); }
}
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
cap sayo = new cap();
label4.Text = int.Parse(sayo.capital());
}
private void label4_Click(object sender, EventArgs e)
{
}
}
}
este programa lo que hace es calcular el interes de un monto inicial de acuerdo a cuanto se pidio prestado, a cuanto porcentaje de interes y el tiempo por el que fue prestado. Al pasar el primer año, se calcula el monto inicial + interes = monto total, y al segundo año o mas se calcula el monto total + interes y asi sucesivamente hasta terminar el periodo del prestamo. la forma recursiva se vuelve a llamar, osea que vuelve a hacer el procedimiento dentro de si misma, y la iteraria es de forma seguida y larga. No importa si va primero o despues, los dos tipos llegan al mismo objetivo, son dos diferentes metodos de hacer la misma accion. El recursivo manda a llamar la misma funcion dentro de si misma y iterativo hace todo el trabajo seguido.