سلام.دوست عزیز پیشنهاد می کنم مبحث توابع بازگشتی در برنامه نویسی رو بیشتر و دقیقتر مطالعه بفرمایید.بنده اینجا مختصرا خدمتتون توضیح عرض می کنم.
تابع fact به طور بازگشتی به کار گرفته شده.یعنی داخل خودش ، خودش رو فراخوانی میکنه.به طور مثال برای عدد 5 روال فراخوانی تابع fact به این شکل میشه :
fact(5)= 5 * fact(4)
fact(4)= 4 * fact(3)
fact(3)= 3 * fact(2)
fact(2)= 2 * fact(1)
fact(1) : return 1.0
یعنی هر کدوم از fact های سمت راست ،خط زیریش رو صدا میزنه و منتظر جواب میمونه.تا برسه به خط آخر.
خط آخر 1 رو برمیگردونه به خط بالایی(خط 4)
خط چهارم 1 رو دریافت میکنه و در 2 ضرب میکنه و جواب(2) رو برمیگردونه به خط بالایی(خط 3)
خط سوم 2 رو دریافت میکنه و در 3 ضرب میکنه و جواب(6) رو برمیگردونه به خط بالایی.
و الی آخر تا برسه به خط اول که جواب نهایی میشه 120
در مورد اینکه چرا نوع تابع double هست هم عرض کنم که اجباری در کارنیست و می تونه int هم باشه. که در اون صورت return 1.0 باید اصلاح بشه به return 1