جهش با اطمینان در پایتون
جهش با اطمینان در پایتون: دنبال کردن روند اجرا یک راه برای خواندن برنامه است اما می تواند به سرعت پر پیچ و خم شود.
روشی وجود دارد که ما آن را “جهش با اطمینان”می نامیم.
وقتی که شما با فراخوانی یک تابع رسیدید, فرض کنید تابع درست کار می کند و مقادیر مناسب را هم درست باز می گرداند.
بنابر این به جای دنبال کردن روند اجرای تابع, از آن عبور کنید.
در حقیقت شما این روش را زمانی که با تابع پیش ساخته پایتون کار می کردید , تمرین نموده اید.
وقتی که شما math . cos یا math .exp را فرا می خواندید, عملکرد آن تابع را امتحان نمی کردید.
شما فقط فرض می کردید که آنها کار می کنند, زیرا کسانی که کتابخانه پیش ساخته پایتون را نوشته اند , برنامه نویسان خوبی بوده اند .
همین طور است برای وقتی که شما یکی از توابع خودتان را فرا می خوانید.
برای توابع برگشتی نیز به همین صورت است. وقتی که فراخوانی بازگشتی رسیدید .
به جای دنبال کردن روند اجرا فرض کنید که فرا خوانی باز گشتی کار می کند (نتیجه صحیح می دهد ) .
سپس از خود بپرسید: به فرض این که من فاکتوریل n-1 را به دست آورم , آیا می توانم فاکتوریل n را به دست آورم؟
در این مورد واضح است که با ضرب کردن نتیجه در عدد n , می توانید این کار را انجام دهید.
این روش که بدون به پایان رساندن یک تابع آن را صحیح فرض کنیم کمی غیر عادی است, اما دلیل اینکه ما آن را <جهش با اطمینان > نامیده ایم نیز همین است.
مثال
در مثال قبل ما جهش با اطمینان در پایتون از متغیرهای موقتی برای توضیح دادن گام های برنامه و آسان ساختن کد , جهت خطایابی استفاده کردیم.
اکنون می توانیم خطوط برنامه را کمتر کنیم :
از این پس آمادگی بیشتری برای فشرده سازی کد برنامه داریم.
سفارش می کنیم که شما تا وقتی کد توسعه می دهید از نسخه صحیح برنامه استفاده کنید.
هرگاه دیدید برنامه تان کار می کند اما احساس کردید حجیم است , می توانید آن را فشرده تر سازید.
بعد از فاکتوریل معمول ترین مثال بازگشتی , تابع ریاضی Fibonacci است که تعریف زیر را دارا است :
با ترجمه آن به پایتون این تابع به صورت زیر مبدل می شود :
در اینجا اگر بخواهید سعی کنید روند اجرا را دنبال کنید , حتی برای مقادیر کوچک n ممکن است کاملا گیج شوید.
اما بر اساس روش جهش با اطمینان اگر فرض کنید که هردو فراخوانی بازگشتی درست کار می کنند.
آنگاه واضح است که با جمع کردن آن دو با هم جواب صحیح را به دست خواهید آورد.
برسی انواع داده ها در پایتون
اگر ما تابع factcoial را با مقدار ۱٫۵ برسی کنیم , چه اتفاقی می افتد ؟
این شبیه بازگشت بی انتها به نظر می رسد , اما چگونه چنین باشد ؟
یک حالت مبنا ئر وضعیت n==0 وجود دارد . مشکل اینجا است که مقادیر n حالت مبنا را گم می کنند.
در اولین فراخوانی بازگشتی مقدار n برابر با ۰٫۵ – است واز این لحظه مقدار کوچک و کوچک تر می شود اما هیچ گاه به صفر نمی رسد.
ما دو انتخاب داریم:می توانیم تابع factorial را برای کار بر روی اعدا اعشاری تعمیم دهیم ویا factorial را به گو نه ای بسازیم که نوع آرگومان خود را برسی کند.
اولین راه را “تابع گاما ” می نامند و کمی از بحث این کتاب خارج است.
بنابراین را دوم را در پیش می گیریم.
نویسنده : زهرا رستمی