Anar al contingut

Recursión

De L'Enciclopèdia, la wikipedia en valencià
Anunci de cacao en una image recursiva. La dòna mostra un paquet idèntic al del propi anunci, contenint aixina a una atra dòna que mostra un atre paquet més menut, de forma recursiva.
Image recursiva formada per un triàngul de Sierpinski. Cada triàngul està compost d'uns atres, composts a la seua volta de la mateixa estructura recursiva.

La recursión o recursividad és la possibilitat que té un cert tipo d'unitat o procés de contindre's o aplicar-se a sí mateixa indefinidament. La recursión té esta característica discernible en térmens d'autorreferencialidad, autopoiesis, fractalidad o, en atres paraules, construcció a partir d'un mateix tipo. En ànim d'una major precisió, i per a evitar l'aparent circularidad en esta definició, es formula el concepte de recursión de la següent manera:

Un problema que puga definir-se en funció del seu tamany, siga este N, pot dividir-se en instàncies més chicotetes (< N) del mateix problema i es coneixerà la solució explícita a les instàncies més simples, lo que es coneix com a casos base, i es pot aplicar inducció sobre les cridades més chicotetes i supondre que estes queden resoltes.cita requerida

A continuació s'exponen alguns eixemples:

  • Factorial: Es desija calcular n! (el factorial de n, que es definix com el producte de tots els sancers positius de 1 a n). Es pot definir el problema de forma recurrent com n(n1)!; com (n1)! és menor que n! podem aplicar inducció per lo que disponem del resultat. El cas base és 0! que és 1.
  • Algoritme d'ordenació per fusió: Siga v un vector de n elements, podem separar el vector en dos mitats. Estes dos mitats tenen tamany n/2 per lo que, per inducció, podem aplicar l'ordenació en estos dos subproblemas. Una volta tenim abdós mitats ordenades, simplement devem fusionar-les. El cas base és ordenar un vector de zero o un element, que està trivialmente ordenat i no cal fer res.

En estos eixemples pot observar-se cóm un problema es dividix en vàries (una o més) instàncies del mateix problema, pero de tamany menor, gràcies a la qual cosa es pot aplicar inducció, aplegant a un punt a on es coneix el resultat (el cas base).cita requerida

Recursión en matemàtiques

[editar | editar còdic]

Conjunts definits de forma recurrent

[editar | editar còdic]

Un eixemple de conjunt definit de forma recurrent és el dels número natural, és dir, el conjunt dels número entero no negatius:[1]

  1. 0 pertany a ℕ.
  2. Si n pertany a ℕ, llavors n+1 pertany a ℕ.
  3. Si x verifica les anteriors condicions, llavors x està inclós en ℕ cita requerida.

Funcions definides de forma recurrent

[editar | editar còdic]

Aquelles funcions que el seu domini és un conjunt a lo més enumerable poden ser definides de forma recurrent.[2]

Un eixemple conegut és la definició recurrent de la funció factorial n!:

n!={si n=01si n1n(n1)!

Vejam cóm s'usa esta definició per a trobar el valor del factorial de 3:

3!=3(31)!=32!=32(21)!=321!=321(11)!=3210!=3211=6

Atres eixemples de funcions i successions matemàtiques definides de forma recursiva són:

Constants

[editar | editar còdic]

La raó áurea es pot definir de forma recursiva, com una fracció contínua en que tots els números són uns:

ϕ=1+1ϕ=1+11+11+11+....


De forma similar, l'identitat x=1+x11+x dona lloc a una definició com a fracció contínua de qualsevol raïl quadrada:[3]

x=1+x12+x12+x12+

Resolució de problemes

[editar | editar còdic]

Resolució d'equacions homogénees de primer grau, segon orde:

a) Es passen al primer membre els térmens an, an1, an2, els quals també podrien figurar com an+2, an+1, an

b) Es reemplaça an per r2, an1 per r i an2 per 1, quedant una equació de segon grau en raïls reals i distintes r1 i r2.

c) Es planteja a=ur1n+vr2n

d) Devem tindre com a senya els valors dels dos primers térmens de la successió: A0=k i A1=k. Utilisant estes senyes ordenem el sistema de 2x2:

{u+v=kur1+ur2=k

La resolució d'este sistema nos dona com resultat els valors u0 i v0, que són número real coneguts.

i) La solució general és:

an=u0r1n+v0r2n

Recursión en informàtica

[editar | editar còdic]
Artícul principal → Recursión (ciències de computació).

En programació, un método usual de simplificació d'un problema complex és la divisió d'est en subproblemas del mateix tipo. Esta tècnica de programació es coneix com dividix i venceràs i és el núcleu en el disseny de numerosos algoritmes de gran importància, aixina com també és part fonamental de la programació dinàmica.

Implementació en C:

int factorial (int n)
{
    if (n > 1)
    {
        return n * factorial(n-1);
    }else
    {
        return 1;
    }
}
int main()
{
    printf("Recusividad
");

    int result = factorial(5);
    printf("El resultat és: %i", result);
    return 0;
}

Implementació en C++:

 int factorial(int x)
 {
    if (x > -1 && x < 2) return 1;  // Quan -1 < x < 2 tornem 1 lloc que 0! = 1 i 1! = 1
    else if (x < 0) return 0;       // Error no existix factorial de números negatius
    return x * factorial(x - 1);    // Si x >= 2 tornem el producte de x pel factorial de x - 1
 }

Implementació en Pascal:

  FUNCTION Factorial (CONST N: INTEGER): INTEGER;
  BEGIN
    IF N > 1 THEN
      Factorial := N * (Factorial (N - 1));
    ELSE
      BEGIN
         IF ((N=0) OR (N=1))
           Factorial := 1;
         ELSE
           Factorial := 0;
      END;
    END;
  END;

Implementació en Python:[4]

def factorial(n):
    if n == 1 or n == 0:
        return 1
    else:
        return n * factorial(n-1)

El seguiment de la recursividad programada és casi exactament igual als eixemples abans donats, per a intentar ajudar a que s'entenga millor s'ha acompanyat en moltes explicacions i en colors que diferencia els distints sub-processos de la recursividad.

X = 3 //Volem 3!, per lo tant X inicial és 3
X >= 2 -> return 3factorial(2);
    X = 2 //Ara estem solicitant el factorial de
    2 X >= 2 -> return 2factorial(1);
        X = 1 // Ara estem solicitant el factorial d'1
        X < 2 -> return 1;

[En este punt tenim el factorial d'1 per lo que tornem marcha arrere resolent tots els resultats]

    return 2 [és dir: return 2*1 = return 2factorial(1)]
return 6 [és dir: return 3*2 = return 3factorial(2)factorial(1)] // El resultat tornat és 6

Vore també

[editar | editar còdic]

Referències

[editar | editar còdic]
  1. Alguns autors consideren que els número natural són els número entero positius, és dir, exclouen el 0 d'este conjunt. En eixe cas, basta substituir la llínea que diu «1 pertany a ℕ» per «1 pertany a ℕ».
  2. «Nocions d'espais normados» , Cotlar i Cignoli, Eudeba, Buenos Aires
  3. Ben Thurston, "Estimating square roots, generalized continued fraction expression for every square root", The Ben Paul Thurston Blog
  4. El Llibre de Python. «La recursividad, intentant crear funcions recursivas sense crear un forat negre». Consultat el 30 d'abril de 2020.