Rome recovered because if its literally unmatched in the ancient world ability to recruit armies and put orders of magnitude more men in the field as a portion of their population.
Hannibal never marched on Rome because he knew he could never take it. Doing a siege in the area most loyal to Rome would have been suicidal for his force.
Hannibal was basically in a hostile land, without proper logistics support. There was no way that he can stay still and lay siege, only way he was able to survive so far was his ability to stay mobile and live off the land.
In case of siege, the Romans would not need to fight, they could simply wait until his army slowly died from attrition.
Hannibal never marched on Rome because he knew he could never take it. Doing a siege in the area most loyal to Rome would have been suicidal for his force.