@tailrec -> while 1