Grazie a chi mi ha risposto!
Ho chiesto ad un programmatore e avete ragione tutti e due.
Non entra mai nel ciclo e "r" elevato a 0 rimane zero.
La prima chiamata della funzione ritorna un valore "true" quindi il codice seguente non viene utilizzato riportando solo il valore di "return r" dichiarato come "1".
Le successive chiamate della funzione entrano nel ciclo riportando il valore "r" *2 tante volte quanti sono i cicli utili per far diventare l'espressione di controllo "i" uguale a "true".
Quindi la prima funzione stamperà 1, le seguenti stamperanno 2, 4, 8, 16.
Grazie a tutti.