En este artículo, veremos un conjunto único de procedimientos TCL que se llaman a sí mismos. Estos procedimientos, como ya habrás adivinado, se denominan procedimientos recursivos. Estas son similares a las funciones recursivas en otros lenguajes. Por lo tanto, para comprenderlos aún mejor, consideraremos el mismo procedimiento escrito como una función recursiva en la programación C para comprender aún mejor la sintaxis.
Requisito previo:
si desea saber más sobre TCL, lea amablemente los siguientes artículos de la siguiente manera.
- https://www.geeksforgeeks.org/basics-of-ns2-and-otcltcl-script/
- https://www.geeksforgeeks.org/tcl-script-to-determine-si-un-número-es-positivo-negativo-o-cero-usando-if-else-statement/
- https://www.geeksforgeeks.org/tcl-script-to-find-sum-of-n-natural-numbers-using-looping-statements/
Ejemplo:
consideraremos un ejemplo simple en el que nuestro objetivo es encontrar la suma de n números naturales llamando recursivamente a sumofnnumbers {} . Entendamos este código en bloques.
Paso-1:
Nuestro primer paso es definir un procedimiento que se llame a sí mismo hasta n=1. Usamos la palabra clave proc para definir un procedimiento. Antes de hacerlo, consideremos cómo se vería un procedimiento regular para encontrar la suma de n números naturales.
proc sumofnnumbers {a} { set sum 0 for {set i $a} {$i>=1} {incr i -1} { set sum [expr $sum+$i] } return $sum }
Como puede ver arriba, definimos el procedimiento usando el bucle for convencional . Y, por supuesto, podemos contar del 1 al n o del n al 1. En este caso, hemos contado del n al 1.
Paso 2:
podemos lograr el mismo procedimiento que se muestra arriba con un procedimiento recursivo que se llama a sí mismo hasta n = 1 y logra una funcionalidad similar a una declaración de bucle convencional.
proc sumofnnumbers {a} { if {$a>0} { return [expr $a+[sumofnnumbers [expr $a-1]]] } else { return 0 } }
Nota :
- La sintaxis de un procedimiento debe ser exactamente como se muestra arriba. Si descuida los espacios o abre la llave en una nueva línea, el resultado será un error.
- El mismo procedimiento se puede usar para encontrar el producto de n números naturales. Todo lo que necesita hacer es reemplazar ‘+’ con ‘*’ y devolver 1 en lugar de 0 en el bloque else.
Paso 3:
comparemos el mismo bloque de código con el aspecto que tendría en lenguaje C para comprender mejor la sintaxis.
int sumofnnumbers(int a) { if(a>0) { return a+sumofnnumbers(a-1); } else { return 0; } }
Paso 4:
el siguiente paso es solicitar al usuario que ingrese un número y lo pase como argumento al procedimiento: sumofnnumbers {} . Usamos gets para recibir información del usuario.
puts "Enter the number" gets stdin a puts "The sum of $a numbers is [sumofnnumbers $a]"
Paso 5:
el código completo con la salida es el siguiente.
Código –
proc sumofnnumbers {a} { if {$a>0} { return [expr $a+[sumofnnumbers [expr $a-1]]] } else { return 0 } } puts "Enter the number" gets stdin a puts "The sum of $a numbers is [sumofnnumbers $a]"
Producción :
Publicación traducida automáticamente
Artículo escrito por zyeshwanth y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA