В результате вы получаете бесконечную рекурсию, потому что ваш условный возврат
if (rear == temp)
return 1;
сравнивает ваш предыдущий узел со следующим узлом и поэтому не вернется для #nodes> 1. Вы должны прервать рекурсию условный, как только вы доберетесь до самого первого узла, с которого вы начали.
Так что-то вроде этого
int count_all(node *rear) {
int count = 0;
if (!rear)
return 0;
if (rear == rear->next)
return 1;
return recursive_count_all(rear,rear,count);
}
int recursive_count_all(node* n0, node *rear,int &count) {
if (!rear)
return 0;
node * temp = rear->next;
if (n0 == temp)
return 1;
else
temp = temp->next;
return recursive_count_all(n0, rear->next, ++count);
}