Bucle infinito

Bucle infinito en programación es un error que consiste en realizar un ciclo que se repite de forma indefinida ya que su condición para finalizar nunca se cumple.[1]

Por definición un bucle debe contener condiciones que establezcan cuándo empieza y cuándo acaba, de manera que, mientras las condiciones se cumplan, ejecute una secuencia de código de manera repetitiva. En el caso de ciclo infinito, como la condición de finalización no se alcanza, el bucle sigue ejecutando el segmento de código indefinidamente.

Ejemplos

Lenguaje C

Bucle while

#include <stdio.h>
#include <conio.h>

int main {
	int x = 0;
	while(x < 10) {
		printf("\x¡No acabaré nunca!\n");
	}
        getch();
	return 0;
}

Se observa que la sentencia printf("\x¡No acabaré nunca!\n"); siempre se ejecuta porque la condición del bucle while() siempre es cierta, no existe una condición de salida que obligue al bucle a finalizar. Exactamente, no se alcanza la condición de salida. Si en el ejemplo anterior, dentro del bloque de código del bucle while, se encontrase la instrucción

x++;

El bucle hubiera ejecutado 10 veces y hubiera terminado.

También existe esta posibilidad con el while (true). En C:

#include <stdio.h>
#include <conio.h>

int main(void) {
	while(1) {
		printf("\xadNo acabar\x82 en algún momento!\n");
	}
        getch();
	return 0; /* De todas maneras, el programa no llegará nunca hasta aquí */
}

Bucle for

#include <stdio.h>
int main(void) {
	int cont;
	for (cont = 0; cont < 5; cont++) {
		cont = cont%4;
		printf("%d\n",cont);
	}
	return 0;
}

En la sentencia "printf" se muestra en pantalla 0,1,2,3,0,1,2,3,0,.... Y también podemos crear un ciclo infinito con el for de esta forma:

#include <stdio.h>

int main(void) {
	for (;;)
		printf("Bucle infinito\n");
	return 0;
}

Lenguaje C++

Bucle while

#include <iostream>
using namespace std;

int main(void) {
	while(true){
		cout << "Se repite" << endl;
	}
	return 0;
}

==== Bucle for ====
<source lang="c">
#include <iostream>
using namespace stgd;

int main(int argc, char *argv[]) {
	
	for(int i=0;i==i;i++){
		cout << "Se repite" << endl;
	}

	return 0;
}

Como siempre la variable i va a ser igual a ella misma, se incrementa e itera infinitas veces.

En el siguiente caso, por cada vez que se incrementa la variable, como es menor a 5 se decrementa dentro del cuerpo del bucle. Luego se vuelve a incrementar y de esa manera infinitas veces.

#include <iostream>
using namespace std;

int main(int argc, char *argv[]) {
	int h=0;
	for(int i=0;i<5;i++){
		i--;
		h++;
		cout << "Se repitio: " << h << " Veces." << endl;
	}

return 0;
}

Lenguaje Visual Basic

Bucle while

   Public function suma2(a, b) As Double

   suma2 = a + b

   While (suma2 >= 10)
      suma2 = suma2 + 1
   Wend
   End Function

Siempre que la suma de a y b sea superior o igual a 10.

Bucle do loop

Dim Suma
	Suma = 0
	Do
		Suma = Suma + 1
	Loop

La variable "Suma" se sumará infinitamente 1 unidad.

Lenguaje Pascal

Bucle repeat

Una forma de hacer un bucle infinito en Pascal es con un ciclo repeat como se muestra a continuación:

program HASTAELINFINITO;
begin
	repeat
		writeln('Nunca termina!');
	until 2=3;
end.

Ya que 2 nunca es igual a 3, el código se repite hasta el infinito.

Bucle while

program HASTAELINFINITO;
 
begin
	while 2<>3 do
		writeln('Nunca termina!');
	end;
end.

Lenguaje Pauscal

Bucle repetir

En Pauscal se puede realizar un bucle infinito sin necesidad de establecer una condición equivoca.

  Var i:Entero
  Repetir
     i = i + 1 ' Se incrementa por siempre.
  PorSiempre

También se puede crear un bucle infinito genuino.

  Var i:Entero
  Repetir
     i = i + 1 ' Se ejecuta por siempre porque:
  HastaQue i < 1 ' esta condición nunca es real.

Bucle mientras

En este ejemplo olvide incrementar el valor de i.

  Importar "Utiles.prp"
  Var i:Entero
  Mientras i = 0
     Mensaje("i sigue siendo cero...") ' Se muestra por siempre.
  FinMientras

Bucle contar

En este ejemplo se muestra como utilizamos el bucle "contar" para hacer que la variable i alcance el valor 1, pero por X motivo olvidamos establecer la instrucción "dec" para que el bucle decremente valores.

  Importar "Utiles.prp"
  Var i:Entero
  Contar i = 2 a 1
     Mensaje("i sigue siendo mayor a 1...")
  Seguir

Lenguaje Java

Bucle while

public void loop() {
    int x = 0;
    while(x<10) {
        System.out.println("¡Esto no acaba!");
    }
}

Lenguaje Matlab/Freemat

Bucle for

function print2()
   for i = 1:-1:10
       disp(['Hello I am the number ',int2str(i)]);
   end
end

Bucle while

   function suma2(a, b)
       suma2 = a + b

       while (suma2 >= 10)
           suma2 = suma2 + 1
       end
   end


Lenguaje PHP

Bucle infinito con WHILE

En este código, la variable $variable nunca cambia, siempre vale cero
Por lo tanto, se entra en bucle infinito al ser $variable siempre <500.

<?php
$variable=0;
while ($variable<500)
{
echo $variable;  
}
?>

Bucle infinito con FOR

<?php
for ($var = 0; $var < 10; $var=$var-1)
{
echo $var."<br>";
}
?>
Other Languages
català: Bucle infinit
English: Infinite loop
français: Boucle infinie
italiano: Loop infinito
日本語: 無限ループ
қазақша: Циклдену
한국어: 무한 루프
Nederlands: Oneindige lus
português: Laço infinito
српски / srpski: Бесконачна петља
svenska: Oändlig loop
українська: Нескінченний цикл
中文: 無窮迴圈