Module: زیر برنامه ها بازگشت


Problem

11/12

تکرار روی خطوط

Theory Click to read/hide

وظیفه
در الفبای زبان قبیله "تومبا-یومبا"; چهار حرف: "K"، "L"، "M" و "N". شما باید تمام کلمات متشکل از n حروف را که می‌توان از حروف این الفبا ساخت، نمایش دهید.

مشکل یک مشکل brute-force معمولی است که می تواند به یک مشکل کوچکتر کاهش یابد.
ما به ترتیب حروف را جایگزین کلمه می کنیم.
اولین موقعیت یک کلمه می تواند یکی از 4 حرف الفبا (K. L, M, N) باشد.
اجازه دهید حرف K را ابتدا قرار دهیم. سپس، برای دریافت همه انواع با حرف اول K، باید همه ترکیب‌های ممکن حروف را در موقعیت‌های n - 1 باقی‌مانده و غیره برشمارید. (تصویر را ببینید).
بنابراین، مسئله به حل چهار مسئله با طول n - 1 کاهش می یابد.
 
تکرار بیش از n کاراکتر به صورت بازگشتی
w[0]='K'; // روی آخرین کاراکترهای L-1 تکرار شود w[0]='L'; // روی آخرین کاراکترهای L-1 تکرار شود w[0]='M'; // روی آخرین کاراکترهای L-1 تکرار شود w[0]='N'; // روی آخرین کاراکترهای L-1 تکرار شود w - یک رشته کاراکتر که کلمه کاری را ذخیره می کند.
بنابراین، ما بازگشت را دریافت کردیم. می‌توانیم حل مشکل را در قالب یک رویه بازگشتی ترتیب دهیم. 
باقی مانده است که مشخص شود بازگشت کی به پایان می رسد؟ وقتی همه کاراکترها تنظیم می شوند، یعنی تعداد کاراکترهای مجموعه n است. در این حالت، باید کلمه به دست آمده را روی صفحه نمایش دهید و از رویه خارج شوید.

برنامه سی شارپ به این شکل خواهد بود.
// w - پارامتر قابل تغییر (رشته-نتیجه) // رویه TumbaWords به عنوان یک رشته کاراکتر از الفبا عبور داده می شود، // کلمه کلمه و تعداد کاراکترهایی که قبلاً تنظیم شده است (در ابتدا – 0) استاتیک void TumbaWords (رشته A، رفرانس w، int N) { if (N == w.Length) // w.Length - تعداد کاراکترهای رشته {   // اگر همه کاراکترها قبلاً روی کلمه تنظیم شده باشند،       // سپس لازم است یک رشته خروجی گرفته شود و رویه پایان یابد Console.WriteLine(w); برگشت؛ } برای ( int i = 0; i < w.Length; i ++ ) // اگر شرط بالا نادرست باشد (یعنی همه کاراکترها فاصله نداشته باشند، {     // اگر شرط بالا نادرست است (یعنی همه کاراکترها با هم فاصله ندارند،     // سپس در حلقه تمام کاراکترهای الفبا و را مرور می کنیم   // به طور متناوب شخصیت را در اولین فضای آزاد قرار دهید w += A[i]; TumbaWords (A, ref w, N+1); w = w.Remove(w.Length - 1); // و سپس آخرین کاراکتر اضافه شده را حذف کنید،   // برای ساختن یک کلمه جدید با همان پیشوند } } استاتیک void Main() { int n = Convert.ToInt32(Console.ReadLine()); کلمه رشته = ""; TumbaWords("KLMN"، کلمه مرجع، 0); }
توجه داشته باشید که w یک پارامتر قابل تغییر (رشته نتیجه) است!

Problem

به الفبای زبان قبیله «tumba-yumba» چهار حرف: "K"، "L"، "M" و "N". شما باید همه کلمات متشکل از n حروف را که می‌توان از حروف این الفبا ساختند، نمایش دهید.
(ج) K.Yu. پولیاکوف