Я собираюсь пойти так далеко, чтобы назвать это ошибкой в gprof. Я создал простой пример взаимно рекурсивных функций и получил то же поведение, что и вы. У меня были функции:
int a(int n){return b(n);}
int b(int n){return c(n);}
int c(int n){return (n==0)?n:a(n-1);}
и основной ():
for(int j=0; j <1000; ++j)
for(int i=0; i < 10; ++i)
cout << a(i);
Я попытался заменить вызов a () на:
int d(int n){return a(n);}
в надежде, что gprof зарегистрирует вызов цикла из d () лучше, чем вызов main (), но я получил тот же результат.
Я также заменил cout на printf () и создал программу на C, с теми же результатами, что и для вызывающего абонента.