Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์ประโยคทั้งหมดที่สร้างได้จากรายการคำแบบเรียกซ้ำ (Recursive) ด้วย C++

กำหนดรายการคำ (List of Words) เป้าหมายคือสร้างประโยคทั้งหมดที่เป็นไปได้ซึ่งสามารถสร้างได้โดยการนำคำจากรายการมาใช้โดยใช้วิธีเรียกซ้ำ (Recursive Approach) คุณสามารถนำคำได้เพียงคำเดียวในแต่ละครั้งจากทั้งสองรายการ

ดูสถานการณ์ Input-Output ต่างๆ

Input -

sentence[row][col] = {{"I", "You"}, {"Do", "do not like"}, {"walking", "eating"}}

Output** -

I Do walking I Do eating I like walking I like eating You Do walking You Do eating You like walking You like eating

คำอธิบาย - การนำคำหนึ่งคำจากแต่ละรายการใน sentence[0-2] จะได้ประโยคข้างต้น

Input -

sentence[row][col] = {{"work", "live"}, {"easy", "happily"}}

Output -

work easy work happily live easy live happily

คำอธิบาย - การนำคำหนึ่งคำจากแต่ละรายการใน sentence[0-1] จะได้ประโยคข้างต้น

วิธีการที่ใช้ในโปรแกรมด้านล่าง

  • ประกาศอาร์เรย์ 2 มิติแบบ string เป็น sentence[row][col] ส่งข้อมูลไปยังฟังก์ชัน Recursive_Print(sentence)

  • ภายในฟังก์ชัน Recursive_Print(sentence)

    • สร้างอาร์เรย์แบบ string เป็น arr[row]

    • เริ่มลูป FOR จาก i=0 ถึง i น้อยกว่า col ภายในลูป ตรวจสอบ IF sentence[0][i] ไม่ว่าง แล้วเรียกฟังก์ชัน Recursion(sentence, 0, i, arr)

  • ภายในฟังก์ชัน Recursion(string sentence[row][col], int temp_1, int temp_2, string arr[row])

    • ตั้งค่า arr[temp_1] = sentence[temp_1][temp_2]

    • ตรวจสอบ IF temp_1 เท่ากับ row-1 แล้วเริ่มลูป FOR จาก i=0 ถึง i น้อยกว่า row ภายในลูป พิมพ์ arr[i]

    • เริ่มลูป FOR จาก i=0 ถึง i น้อยกว่า col ภายในลูป ตรวจสอบ IF sentence[temp_1+1][i] ไม่เท่ากับ space แล้วเรียกฟังก์ชัน Recursion(sentence, temp_1+1, i, arr) แบบ Recursive

  • พิมพ์ผลลัพธ์

ตัวอย่างโค้ด

#include<bits/stdc++.h>
#define row 3
#define col 3
using namespace std;

void Recursion(string sentence[row][col], int temp_1, int temp_2, string arr[row]) {
    arr[temp_1] = sentence[temp_1][temp_2];
    if(temp_1 == row - 1) {
        for(int i = 0; i < row; i++) {
            cout << arr[i] << " ";
        }
        cout << endl;
        return;
    }
    for(int i = 0; i < col; i++) {
        if(sentence[temp_1+1][i] != "") {
            Recursion(sentence, temp_1+1, i, arr);
        }
    }
}

void Recursive_Print(string sentence[row][col]) {
    string arr[row];
    for(int i = 0; i < col; i++) {
        if(sentence[0][i] != "") {
            Recursion(sentence, 0, i, arr);
        }
    }
}

int main() {
    string sentence[row][col] = {{"Ajay", "sanjay"}, {"Like", "is"}, {"Reading", "eating"}};
    Recursive_Print(sentence);
    return 0;
}

ผลลัพธ์

หากเรารันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้:

Ajay Like Reading Ajay Like eating Ajay is Reading Ajay is eating sanjay Like Reading sanjay Like eating sanjay is Reading sanjay is eating