سلام.
روش کار تابع ریکرسیو یا بازگشتی به این صورته که داخل تابع خود تابع صدا زده میشه و 1 شرطی داخل تابع قرار داده میشه تا در loop نیفته.
تا موقعی که اون شرط برقرار تابع مجدد خودش رو صدا میزنه.
تابع ریکرسیو زمانی استفاده میشه که بحث عمق مطرح باشه. اگه میزان عمق مطلب رو بدونیم که به راحتی با یه حلقه for یا چند تا for تو در تو مشکل رو حل میکنیم.
اما زمانی که ندونیم عمق کار تا کجا پیش میره استفاده از تابع ریکرسیو بهترین راه هست.
مثلا در این مورد که شما سوال فرمودید:
اگر فقط بخوایم فایل های داخل یه فولدر خاص رو بررسی کنیم با یه foreach مشکل حل میشه. چون عمق نا محدود نداریم.
اما اگه بخوایم تمام فایل های داخل یه درایو رو تحت تاثیر قرار بدیم میزان عمق نا مشخص هست. پس از تابع ریکرسیو استفاده میکنیم.
به این صورت که داخل تابع بررسی میکنیم که آیا داخل فولدر جاری فولدر دیگری هست یا نه. اگه بود باز خودش رو با آدرس فولدرهای داخل فولدر جاری صدا میزنیم. در ادامه هم فایل های موجود در فولدر جاری رو تحت تاثیر قرار میدیم.
قطعه کد زیر رو ملاحظه کنید:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شرطی که عرض کردم که چک میکنه که آیا به انتهای عمق رسیدیم یا نه در این کد این خط هست:
For Each Subfld In fld.SubFolders
که در صورت وجود فولدر زیر شاخه باز خود تابع مورد نظر رو صدا میزنه.