چند وقت پیش، در راستای پیادهسازی یه ایده، به الگوریتمی رسیدم که ایدهش به صورت بازگشتی پیادهسازی میشد، اما مشکلی که این وسط وجود داشت این بود که هزینهبر بودن پیادهسازی الگوریتم، بیش از حد تحمل من بود. یادم نمیاد از کجا ولی فهمیدم که میشه برنامهی بازگشتی رو با شبیهسازی اون کاری که CPU در پردازش این برنامهها انجام میده، به صورت یک برنامهی تکراری (استفاده از حلقهی تکرار به جای صدا زدن تابع) نوشت،
این لینک و یک سری آموزشی در
این لینک به خوبی ایده و شیوهی این تبدیل رو توضیح میدن. ایدهی کلی اینه: «CPU متغیرهای محلی و وضعیت فعلی تابع رو در یک استک ذخیره میکنه و این کار رو تا زمان رسیدن به نتیجهی نهایی تابع، در تکرارهای بعد ادامه میده.». بنابراین
- یه پشته بساز.
- صدا زدن تابع رو پوش۱ معنی کن.
- برگردوندن مقدار توسط تابع رو پاپ۲ معنی کن.
- محاسبات اصلی رو بذار داخل یه حلقه و اول هر حلقه، مقادیر مورد نیازت رو از پشته پاپ کن.
شروع داستان!
اما داستان این پست از اونجا شروع میشه که در متلب پشته نداریم! :)