No se pueden implementar FUNCIONES RECURSIVAS?


([N1] santiprat) #1

Hola amigos velneadores, resulta que estaba creando una función recursiva y cuando la puse en marcha se rompió vClient.

Alguien sabe si no se pueden hacer aún?

A las órdenes,

santiprat


([N3] pacosatu) #2

Hola santiprat.

Claro que se puede.

Por ejemplo el típico ejemplo de cálculo del factorial de un NUMERO.


If ( NUMERO < 2 )
Set ( RESULTADO, 1 )
Else
Set ( RESULTADO, NUMERO * fun:FACTORIAL@0PS_Ejercicios_app.app(NUMERO - 1) )
Set dato de retorno ( RESULTADO )

Quizás en tu caso se rompe el vClient porque no hay ninguna salida en la recursividad. Por ejemplo en el factorial la condición de salida se produce cuando NUMERO < 2.

Saludos
Paco Satué


([N1] santiprat) #3

Hola Paco, gracias por responder, así que a la fundación tengo que “decirle” que no quiero un dato de retorno. Ese es mi caso, probaré ahora.

Muchas Gracias


([N1] santiprat) #4

Probé indicandole a la función que no es necesario un dato de retorno pero sigue rompiendo el vClient, a continuación subo una imagen de la función que he realizado para ver que tengo mal, la verdad que no me estoy dando cuenta.

Saludos



([N3] pacosatu) #5

Hola Santiprat.

El comando “Set retorno proceso = NO” no sirve para las funciones. Usa en su lugar “Set dato de retorno”.

Así de pronto veo:

  • Un “Recorrer lista lectura/escritura” que abre transacción, ¿para qué?
  • El CONTADOR está fuera del bucle, solo se incrementa una vez en cada llamada
  • La condicion de salida CONTADOR!(CAN_TEC-1) ¿hace su función?
  • Puede que Velneo tenga un límite en el Nº de llamadas recursivas

A falta de debugger monta un log de texto para depurar la función.

Saludos
Paco Satué


([N1] santiprat) #6

No sabía que no funcionaba “Set retorno proceso = NO” no sirve para las funciones, gracias por la aclaración. Te cuento que no le he podido meter mano a la función, ni bien me ponga al día te comento como me fué.

Gracias por la ayuda,

a las órdenesm

santiprat