# V2565. MISRA. A function should not call itself either directly or indirectly.

This diagnostic rule is based on the software development guidelines developed by MISRA (Motor Industry Software Reliability Association).

Functions should not call themselves either directly or indirectly. Recursion can lead to elusive bugs such as stack overflow in the case of very deep recursion.

Example of non-compliant code:

    #include <stdint.h>

    uint64_t factorial(uint64_t n)
    {
      return n > 1 ? n * factorial(n - 1) : 1;
    }

Recursive calls should be replaced with loops wherever possible. The following example demonstrates how this can be applied to the code above:

    #include <stdint.h>

    uint64_t factorial(uint64_t n)
    {
      uint64_t result = 1;
      for (; n > 1; --n)
      {
        result *= n;
      }

      return result;
    }

This diagnostic is classified as:

MISRA-C-2012-17.2 MISRA-C-2023-17.2 MISRA-CPP-2008-7.5.4