Getting wrong value from Serial.read()
This

 int led = Serial.read();


is execute before setup() and loop(), just one time. All initializations outside any function are execute before the start of the program. You have not execute Serial.begin yet.

You probably want to read inside the loop ...

Edit:

Second problem: you are calling loop recursively

void loop()
{
    if(Serial.available()) {
        Serial.println(led);
        loop();


When a byte in available in the serial port, you will call loop. As you never read the serial port, Serial.available will still return > 0, and you will enter in a never ending recursion.