Synchronous data-flow programming is a functional style language made for programming embedded systems.
It follows the paradigm of clocked circuits, where variables are wires.
The latter has explicit recursion which can be disabled when designing embedded systems.
Haskell libraries closely follow this paradigm with their functional reactive DSLs.
Recursion is actually useful to recursively define circuits with repeated patterns, e.g., the butterfly FFT.
Check for example Lustre/Scade: http://www.esterel-technologies.com/ or its more recent successor Lucid synchrone: http://www.di.ens.fr/~pouzet/lucid-synchrone/
The latter has explicit recursion which can be disabled when designing embedded systems.
Haskell libraries closely follow this paradigm with their functional reactive DSLs. Recursion is actually useful to recursively define circuits with repeated patterns, e.g., the butterfly FFT.