Javascript
<script>
var button = document.createElement('button');
button.addEventListener('click', document.createElement);
window.onerror = setTimeout.bind(window, button.click);
button.click();
</script>
Explanation: document.createElement() expects a parameter, so clicking the button causes an error to be thrown. The window catches the error and dispatches another click to the button. I don't think this meets the definition of recursion provided since the browser's event loop is invoking the error handler.