Ejemplo de bucle infinito
Los siguientes son algunos ejemplos de bucles infinitos.
Ejemplo de C
#includelt;iostream.hgt;
int main()
{
para (int i=0;;i)
{
coutlt;lt;char(i);
}
devuelve 0 ;
}
Bucle infinito en C:
#include lt;stdio.hgt;
main()
{
int a = 0;
mientras (a lt; 10)
{
printf(d\ n , a);
if (a = 5) {
printf(a es igual a 5!\n);
}
}
a;
}
return 0;
}
El programa anterior siempre mostrará infinito Enrolla una cuerda.
Bucle infinito en BASIC:
10 PRINTInfinite Loop
20 GOTO10 'Saltar al número de línea = 10'
Ejemplo de lenguaje ensamblador X86 en:
bucle:
; Código para repetir aquí
jmploop
Ejemplo de Python:
whileTrue:
print(Bucle Infinito) El siguiente es un ejemplo de un bucle infinito en Visual Basic:
dimxasintegerdountilx gt; 5 'No habrá x en absoluto' gt; x = 1 x = x 1loop
Cada vez que se ejecuta el bucle, x se establecerá en 1, luego en 2, y como el valor aún no es mayor que 5, nunca saldrá. Esta situación se puede mejorar moviendo x = 1 desde el interior del bucle hasta antes del bucle.
Es posible que algunos programadores no estén familiarizados con la sintaxis de un lenguaje de programación específico, lo que puede generar un bucle infinito, como el siguiente programa en lenguaje C:
#include stdio; .hgt;
main()
{
int a=0;
mientras(a lt; 10)
{
printf(d\n, a);
si(a=5){/a se establece en 5, ingresando a un bucle infinito printf(a es igual 5!\);}
a;
}
return0;
}
El resultado esperado es un número del 0 al 9, donde un igual a 5 aparecería a medio camino entre 5 y 6, pero cuando el programador escribió el programa, confundió el operador = para configurar y el operador == para determinar lo mismo, por lo que el programa cámbielo cada vez que se ejecute el bucle. a se establece en 5, por lo que la variable a nunca llegará a 10 y el bucle se convertirá en un bucle infinito.
A veces, condiciones de salida de bucle inapropiadas también pueden conducir a bucles infinitos inesperados, como el siguiente ejemplo de C:
float x=0.1;
while(x!=1.1)
{
/// Pueden ocurrir problemas debido a errores de punto flotante
printf(x = f\n, x);
x = x 0.1;
}
En algunos sistemas operativos, el programa anterior se repetirá 10 veces antes de salir, pero en algunos sistemas, el programa anterior puede continuar Ejecutándose sin salir, el problema radica principalmente en la condición de salida del bucle (x! El problema es que la condición de salida del bucle (x! = 1,1) debe ser igual a dos números de coma flotante para salir, y el resultado depende de la forma en que el sistema maneja la flotación números de puntos, siempre que el sistema ejecute el ciclo 10 veces y el resultado sea ligeramente diferente de 1.1, el programa anterior se convertirá en un ciclo infinito
Si la condición de salida se cambia a (x. lt; 1.1), este problema no ocurrirá. El programa puede ejecutar otro bucle, pero no se convertirá en un bucle infinito. Otra solución es usar una variable entera como variable del bucle y luego usar esa variable para decidir si se sale del bucle. bucle.
Programa de análisis numérico También pueden ocurrir bucles infinitos inesperados, por ejemplo, si un programa debe iterar hasta que el error sea menor que un cierto valor, pero los errores de redondeo en la operación impiden que el error se haga más pequeño. que ese valor particular Un bucle de Alderson es un tipo de bucle que tiene un bucle infinito. Un bucle que sale de una condición, pero debido a la forma en que está escrito el programa (generalmente un error de programación), la condición de salida nunca se cumple. es más probable que ocurra al depurar un programa de interfaz de usuario
El siguiente seudónimo en lenguaje C El código contiene un ciclo de Alderson que calcula la suma de una serie de números ingresados por el usuario y sale del ciclo. el usuario ingresa 0. Sin embargo, el programa usa el operador incorrecto:
suma=0; while (true){printf(ingrese un número para agregar a la suma o 0 para salir); (); if(i*0){// Si i multiplicado por 0 es verdadero, suma la suma a i Valor suma =i // Pero esto no puede suceder, porque no importa cuál sea el valor de i (i * 0; ) es 0! = en lugar de *, el código funcionará bien} if (sumgt; 100) {break; // Termina el ciclo, pero nunca se alcanza porque la suma nunca aumenta}}
unsigned int fac(unsigned int a){
/n!=n*(n-1)!
return(fac(a-1)*a);
}
Generalmente, los programas recursivos tendrán una condición específica Cuando la condición es verdadera. El resultado se calculará directamente en lugar de mediante recursividad, lo que daría como resultado una recursividad infinita si esta condición no está definida en el programa.
La recursividad infinita provocará un desbordamiento de la pila y la recursividad infinita no saldrá, por lo que también es un tipo de bucle infinito. Sin embargo, si utiliza la recursividad de cola para manejar un programa recursivo, algunos lenguajes de programación, como Scheme, optimizan el bucle para que no provoque un desbordamiento de la pila.
El programa anterior se puede modificar sin recursividad infinita.
unsigned int fac(unsigned int a){
if(a==0)
{/define 0!=1
return1;
}
else
{
return(fac(a-1)*a);
}
}