Visual Basic para Aplicaciones - Recursividad, porque se conserva e incrementa el valor de la variable

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Recursividad, porque se conserva e incrementa el valor de la variable

Publicado por Raymundo (6 intervenciones) el 02/03/2023 04:22:31
Hola buenas noches.

Estoy utilizando el siguiente código para mostrar el uso de la recursividad.

Sub cuenta_atras(num)
num = num - 1
If num > 0 Then
Debug.Print num
cuenta_atras (num)
Else
Debug.Print "Boooooooom!"
End If
Debug.Print "Fin de la función " & num

End Sub
Sub Ejecuta()
cuenta_atras (5)
End Sub

Mi pregunta es: No me queda claro porque cuando num=0 sale por el Else y escribe Boooooooom!
pero continua escribiendo:

4
3
2
1
Boooooooom!
Fin de la función 0
Fin de la función 1
Fin de la función 2
Fin de la función 3
Fin de la función 4

Solicito su apoyo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Recursividad, porque se conserva e incrementa el valor de la variable

Publicado por Antoni Masana (498 intervenciones) el 03/03/2023 17:28:31
El problema esta en el lugar que has puesto el mensaja de Fin de la funcion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub cuenta_atras(num)
    num = num - 1
    If num > 0 Then
        Debug.Print num
        cuenta_atras (num)
    Else
        Debug.Print "Boooooooom!"
        Debug.Print "Fin de la función " & num
    End If
End Sub
 
Sub Ejecuta()
    cuenta_atras (5)
End Sub

Te he realizado un esquema de como funciona para que veas porque sale el mensaje que no entiendes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
Sub Ejecuta()
         cuenta_atras(5)>----+
  +-->End Sub                |
  |                          |
  |   +----------------------+
  |   |
  |   V
  |  Sub cuenta_atras(num) <-- 5
  |      num = num - 1
  |      If num > 0 Then
  |          Debug.Print num
  |          cuenta_atras (num)-----------------------------+
  |      Else                                               |
  |          Debug.Print "Boooooooom!"                      |
+-|----->End If                                             |
| |      Debug.Print "Fin de la función " & num             |
| +--End Sub                                                |
|                                                           V
|    +------------------------------------------------------+
|    |
|    V
|    Sub cuenta_atras(num) <-- 4
|        num = num - 1
|        If num > 0 Then
|            Debug.Print num
|           cuenta_atras (num)------------------------------+
|        Else                                               |
|            Debug.Print "Boooooooom!"                      |
| +----->End If                                             |
| |      Debug.Print "Fin de la función " & num             |
+----End Sub                                                |
  |                                                         V
  |  +------------------------------------------------------+
  |  |
  |  V
  |  Sub cuenta_atras(num) <-- 3
  |      num = num - 1
  |      If num > 0 Then
  |          Debug.Print num
  |          cuenta_atras (num)-----------------------------+
  |      Else                                               |
  |          Debug.Print "Boooooooom!"                      |
+-|----->End If                                             |
| |      Debug.Print "Fin de la función " & num             |
| +--End Sub                                                |
|                                                           V
|    +------------------------------------------------------+
|    |
|    V
|    Sub cuenta_atras(num) <-- 2
|        num = num - 1
|        If num > 0 Then
|            Debug.Print num
|            cuenta_atras (num)-----------------------------+
|        Else                                               |
|            Debug.Print "Boooooooom!"                      |
| +----->End If                                             |
| |      Debug.Print "Fin de la función " & num             |
+----End Sub                                                |
  |                                                         V
  |  +------------------------------------------------------+
  |  |
  |  V
  |  Sub cuenta_atras(num) <-- 1
  |      num = num - 1
  |      If num > 0 Then
  |          Debug.Print num
  |          cuenta_atras (num)-----------------------------+
  |      Else                                               |
  |          Debug.Print "Boooooooom!"                      |
+-|----->End If                                             |
| |      Debug.Print "Fin de la función " & num             |
| +--End Sub                                                |
|                                                           V
|    +------------------------------------------------------+
|    |
|    V
|    Sub cuenta_atras(num) <-- 0
|        num = num - 1
|        If num > 0 Then
|            Debug.Print num
|           cuenta_atras (num)
|       Else
|           Debug.Print "Boooooooom!"
|        End If
|        Debug.Print "Fin de la función " & num
+----End Sub


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar