Хвостовая рекурсия в C ++ с несколькими рекурсивными вызовами функций

Я читал этот пост о хвостовой рекурсии.

Я скопирую опубликованное решение:

unsigned int f( unsigned int a ) {
   if ( a == 0 ) {
      return a;
   }
   return f( a - 1 );   // tail recursion
}

Мне было интересно, а что, если результат зависит от нескольких рекурсивных вызовов функций? Например:

unsigned int f( unsigned int a ) {
    if ( a == 0 ) {
          return a;
       }
    return f(a -1) + f( a - 1 );   
}

Может ли компилятор оптимизировать приведенный выше код?

7
задан Community 23 May 2017 в 10:26
поделиться