زیر برنامه ها رویه ها و توابع بازگشتی


وظیفه
در الفبای زبان قبیله "تومبا-یومبا"; چهار حرف: "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 است. در این حالت، باید کلمه به دست آمده را روی صفحه نمایش دهید و از رویه خارج شوید.

برنامه C++ به این شکل خواهد بود.
#include<iostream> با استفاده از namespace std. void TumbaWords( رشته A، رشته &w، int N) // w - پارامتر قابل تغییر (رشته-نتیجه) // رویه TumbaWords به عنوان یک رشته کاراکتر از الفبا عبور داده می شود، // کلمه کلمه و تعداد کاراکترهایی که قبلاً تنظیم شده اند (قبل از – 0). { int i; اگر (N == w.size()) {   // اگر همه کاراکترها قبلاً روی کلمه تنظیم شده باشند،     // سپس لازم است یک رشته خروجی گرفته شود و رویه پایان یابد cout << w<< endl; برگشت؛ } برای (i = 1; i < A.size(); i ++) {   // اگر شرط بالا نادرست باشد (یعنی همه کاراکترها فاصله نداشته باشند،   // سپس در حلقه تمام کاراکترهای الفبا و را مرور می کنیم // به طور متناوب شخصیت را در اولین فضای آزاد قرار دهید w[N] = A[i]; TumbaWords (A, w, N+1)؛ } } main() { intn; کلمه رشته intn; cin>> n word.resize(n); // رشته را به اندازه n افزایش دهید TumbaWords ("KLMN"، word، 0 ); }
توجه داشته باشید که w یک پارامتر قابل تغییر (رشته نتیجه) است!