When calling a function you do not include the function return type. If you include the function return type (the void) then it becomes a "forward declaration" of the function and not the calling of the function.
Yes, you can call "loop()" from anywhere - it is just a function like any other.
BUT
It is a really really really stupid thing to do.
Before you even consider the possibility of even thinking about the idea of this, you have to have a really good understanding of what recursion is.
Whenever a function calls itself, or calls a second function which calls the first function, or any combination of functions which result in any one of the functions being called by a child function of any of the other functions, that is recursion. If you don't have a way of stopping the recursion, then the recursion will continue for ever, and the microcontroller will have a hernia.
Take the following example - I have a number "n" that I want to keep dividing by 2 until it becomes less than 2. Now, I could use a loop:
float n = 83.134;
while(n>=2.0)
{
n = n / 2.0;
}
which is all well and good, or I could be fancy and use recursion:
float n = 83.134;
void divide()
{
n = n / 2.0;
if(n > 2.0)
divide();
}
divide();
They both give the same result, but work differently.
Note that in the second example the divide() function is only called from within the divide() function IF certain criteria are matched. This allows the recursive calls to come to an end when the criteria are reached and return from all the parent divide() function calls.
Every time you call a function two bytes are pushed on to the stack (temporary memory storage), and whenever a function is finished it removes those two bytes from the stack.
If you call a function which then itself calls a function you end up with 4 bytes on the stack - two from the function you called, and two from the function your function called.
So, if you use recursion and you exceed a certain "depth", then you can see that the stack is going to rapidly fill up. If you call a function that calls itself, then for each time it calls itself you are going to get an additional 2 bytes on the stack. 1,000 iterations and you have used up all the memory of the chip (for a 328P) and the program will crash.
Recursion on a microcontroller, therefore, should be avoided at all cost - it's a very expensive operation in terms of memory, and quite easy to get wrong.
Sometimes, though, it can make programming of certain mathematical operations somewhat simpler to understand and implement.