محاسبه اعداد - نسخهی قابل چاپ |
محاسبه اعداد - 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 |