تالار گفتمان مانشت
محاسبه اعداد - نسخه‌ی قابل چاپ

محاسبه اعداد - JetiX - 01 آبان ۱۳۹۵ ۱۰:۴۸ ب.ظ

مجموع اعداد فرد بین ۱ تا n؟


مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


RE: محاسبه اعداد - Pure Liveliness - 01 آبان ۱۳۹۵ ۱۱:۱۶ ب.ظ

سلام. این تابع میاد به صورت بازگشتی مجموع اعداد فرد از ۱ تا n رو حساب میکنه اما مهم نیست n زوج باشه یا فرد، در هر صورت پاسخ درستی میده.
مقداری که در صورت زوج بودن عدد n برمیگردونه: [tex]return\: (n+oddsum(n-2))[/tex]
اگه [tex]n\: \mod\: 2\: ==0[/tex] در این صورت زوج خواهد بود. پس عدد قبلی ش فرد هست دیگه. اگه زوج باشه یکی ازش کم میکنه میشه عدد قبلیش. اون رو برمیگردونه به علاوه ی اعداد فردی که قبل از عدد زوج قبلیش هستن. یعنی میاد همین تابع رو برای عدد زوج قبلیش اجرا میکنه. جوابش رو با عدد فرد قبل از خودش جمع میکنه و این روال ادامه داره تا جایی که به ۱ برسیم. یعنی مثلا اعداد زیر رو در نظر بگیرید. میخوایم جمع اعداد فرد رو حساب کنیم.
۱ ، ۲، ۳، ۴، ۵، ۶، ۷، ۸
n=8 . دفعه ی اول [tex]oddsum(۸)[/tex] صدا زده میشه. چون زوج هست، یکی ازش کم میشه یعنی n میشه ۷. حالا مقدار بازگشتی [tex]oddsum(7+oddsum(6))[/tex] خواهد بود. حالا ۷ رو جمع کرده و برای عدد زوج قبلیش صدا میزنه تابع رو. یعنی واسه [tex]oddsum(۶)[/tex]
[tex]oddsum(۵+oddsum(۴))[/tex] صدا زده میشه. تا برسیم به ۱. تعداد صدا زدن تابع برابر میشه با مرتبه ی زمانی تابع که برابر هست با n/2

با فرض فرد بودن n, دستور else انجام میشه و خواهیم داشت: [tex]return\: (n+oddsum(n-2))[/tex] مثلا توی اینجا:
۱،۲،۳،۴،۵،۶،۷
مقدار بازگشتی برابر میشه با [tex]return\: (۷+oddsum(۵))[/tex] که [tex]oddsum(۵)[/tex] صدا زده میشه و برابر میشه با [tex]۵+oddsum(3)[/tex] تا برسیم به ۱. مرتبه ش میشه n/2