در هر بار اجرا if و else که فقط یکیشون اجرا میشه و قسمت if هم حالت پایه فانکشن هست ، یعنی وقتی تابع با عدد 1 فراخوانی شد یه مقدار ثابت 1 رو برگشت داده میشه که اگر این شرط نباشه
تابع میفته داخل یه حلقه و هیچ وقت به پایان نمیرسه و اصطلاحا stackoverflow رخ میده
فکر میکنم عمده مشکل شما برمیگرده به اینکه مفهوم توابع بازگشتی رو بلد نیستین، که اگر سرچ کنید در موردشون و مطالبی بخونید صد در صد به فهم قطعه کدی که نوشتین کمک میکنه
موفق باشید