ภาพรวม
ได้รับอาร์เรย์จำนวนเต็ม Arr[] เป็นอินพุต เป้าหมายคือหาค่าสูงสุด (Maximum) และต่ำสุด (Minimum) ในอาร์เรย์โดยใช้วิธีการเรียกซ้ำ (Recursive)
เนื่องจากใช้ Recursion จะเดินผ่านอาร์เรย์จนถึงความยาว=1 แล้วคืน A[0] เป็น Base case มิฉะนั้นเปรียบเทียบอิลิเมนต์ปัจจุบันกับค่าต่ำสุด/สูงสุดปัจจุบัน แล้วอัปเดตโดยเรียกซ้ำสำหรับอิลิเมนต์ถัดไป
ตัวอย่างสถานการณ์
อินพุต − Arr = {12, 67, 99, 76, 32};
เอาต์พุต − Maximum in the array: 99
คำอธิบาย − 99 เป็นค่าสูงสุด
อินพุต − Arr = {1, 0, -99, 9, 3};
เอาต์พุต − Minimum in the array: -99
คำอธิบาย − -99 เป็นค่าต่ำสุด
แนวทางการแก้ปัญหา
หาค่าต่ำสุด (Minimum)
- รับอาร์เรย์
Arr[] - ฟังก์ชัน
recforMin(int arr[], int len)คืนค่าต่ำสุดแบบเรียกซ้ำ - ตัวแปร
minimum - หาก
len == 1ตั้งminimum = arr[0]คืนค่า - มิฉะนั้น
minimum = min(arr[len], recforMin(arr, len-1))คืนค่า - พิมพ์ผลลัพธ์ใน main
หาค่าสูงสุด (Maximum)
- รับอาร์เรย์
Arr[] - ฟังก์ชัน
recforMax(int arr[], int len)คืนค่าสูงสุดแบบเรียกซ้ำ - ตัวแปร
maximum - หาก
len == 1ตั้งmaximum = arr[0]คืนค่า - มิฉะนั้น
maximum = max(arr[len], recforMax(arr, len-1))คืนค่า - พิมพ์ผลลัพธ์ใน main
ตัวอย่างโค้ด C++ - หาค่าต่ำสุด
#include <iostream>
using namespace std;
int recforMin(int arr[], int len){
int minimum;
if (len == 1){
minimum = arr[0];
return minimum;
} else {
return minimum = arr[len] < recforMin(arr, len-1) ? arr[len] : recforMin(arr, len-1);
}
}
int main(){
int Arr[] = {-89, 98, 76, 32, 21, 35, 100};
int length = sizeof(Arr)/sizeof(Arr[0]);
cout << "Minimum in the array :" << recforMin(Arr, length);
return 0;
}
ผลลัพธ์
Minimum in the array: -89
ตัวอย่างโค้ด C++ - หาค่าสูงสุด
#include <iostream>
using namespace std;
int recforMax(int arr[], int len){
int maximum;
if (len == 1){
maximum = arr[0];
return maximum;
} else {
return maximum = arr[len] > recforMax(arr, len-1) ? arr[len] : recforMax(arr, len-1);
}
}
int main(){
int Arr[] = {-89, 98, 76, 32, 21, 35, 100};
int length = sizeof(Arr)/sizeof(Arr[0]);
cout << "Maximum in the array :" << recforMax(Arr, length);
return 0;
}
ผลลัพธ์
Maximum in the array: 100