۰
subtitle
سلام. این تابع میاد به صورت بازگشتی مجموع اعداد فرد از ۱ تا n رو حساب میکنه اما مهم نیست n زوج باشه یا فرد، در هر صورت پاسخ درستی میده.
مقداری که در صورت زوج بودن عدد n برمیگردونه: return(n+oddsum(n−2))
اگه nmod2==0 در این صورت زوج خواهد بود. پس عدد قبلی ش فرد هست دیگه. اگه زوج باشه یکی ازش کم میکنه میشه عدد قبلیش. اون رو برمیگردونه به علاوه ی اعداد فردی که قبل از عدد زوج قبلیش هستن. یعنی میاد همین تابع رو برای عدد زوج قبلیش اجرا میکنه. جوابش رو با عدد فرد قبل از خودش جمع میکنه و این روال ادامه داره تا جایی که به ۱ برسیم. یعنی مثلا اعداد زیر رو در نظر بگیرید. میخوایم جمع اعداد فرد رو حساب کنیم.
۱ ، ۲، ۳، ۴، ۵، ۶، ۷، ۸
n=8 . دفعه ی اول oddsum(۸) صدا زده میشه. چون زوج هست، یکی ازش کم میشه یعنی n میشه ۷. حالا مقدار بازگشتی oddsum(7+oddsum(6)) خواهد بود. حالا ۷ رو جمع کرده و برای عدد زوج قبلیش صدا میزنه تابع رو. یعنی واسه oddsum(۶)
oddsum(۵+oddsum(۴)) صدا زده میشه. تا برسیم به ۱. تعداد صدا زدن تابع برابر میشه با مرتبه ی زمانی تابع که برابر هست با n/2
با فرض فرد بودن n, دستور else انجام میشه و خواهیم داشت: return(n+oddsum(n−2)) مثلا توی اینجا:
۱،۲،۳،۴،۵،۶،۷
مقدار بازگشتی برابر میشه با return(۷+oddsum(۵)) که oddsum(۵) صدا زده میشه و برابر میشه با ۵+oddsum(3) تا برسیم به ۱. مرتبه ش میشه n/2
مقداری که در صورت زوج بودن عدد n برمیگردونه: return(n+oddsum(n−2))
اگه nmod2==0 در این صورت زوج خواهد بود. پس عدد قبلی ش فرد هست دیگه. اگه زوج باشه یکی ازش کم میکنه میشه عدد قبلیش. اون رو برمیگردونه به علاوه ی اعداد فردی که قبل از عدد زوج قبلیش هستن. یعنی میاد همین تابع رو برای عدد زوج قبلیش اجرا میکنه. جوابش رو با عدد فرد قبل از خودش جمع میکنه و این روال ادامه داره تا جایی که به ۱ برسیم. یعنی مثلا اعداد زیر رو در نظر بگیرید. میخوایم جمع اعداد فرد رو حساب کنیم.
۱ ، ۲، ۳، ۴، ۵، ۶، ۷، ۸
n=8 . دفعه ی اول oddsum(۸) صدا زده میشه. چون زوج هست، یکی ازش کم میشه یعنی n میشه ۷. حالا مقدار بازگشتی oddsum(7+oddsum(6)) خواهد بود. حالا ۷ رو جمع کرده و برای عدد زوج قبلیش صدا میزنه تابع رو. یعنی واسه oddsum(۶)
oddsum(۵+oddsum(۴)) صدا زده میشه. تا برسیم به ۱. تعداد صدا زدن تابع برابر میشه با مرتبه ی زمانی تابع که برابر هست با n/2
با فرض فرد بودن n, دستور else انجام میشه و خواهیم داشت: return(n+oddsum(n−2)) مثلا توی اینجا:
۱،۲،۳،۴،۵،۶،۷
مقدار بازگشتی برابر میشه با return(۷+oddsum(۵)) که oddsum(۵) صدا زده میشه و برابر میشه با ۵+oddsum(3) تا برسیم به ۱. مرتبه ش میشه n/2