จากอาร์เรย์ของจำนวนเต็ม N arr[N] ภารกิจคือการหาค่าเฉลี่ยของ arr[N] เพื่อให้บรรลุผลเราสามารถใช้วิธีวนซ้ำหรือวิธีการแบบเรียกซ้ำ เราจะแสดงทั้งสองอย่างในโซลูชันที่กำหนด
ค่าเฉลี่ยของอาร์เรย์จะเป็นผลรวมขององค์ประกอบทั้งหมดของอาร์เรย์หารด้วยจำนวนองค์ประกอบ
วิธีการวนซ้ำ
ในการวนซ้ำ เราใช้ลูปเช่น for-loop, while-loop หรือ do-while loop ซึ่งดำเนินการคำสั่งจนกว่าเงื่อนไขจะเป็นจริงซึ่งหมายถึง 1
มาดูตัวอย่างกันและอภิปรายว่าจะใช้วิธีการวนซ้ำได้อย่างไร
ป้อนข้อมูล
arr[] = {1, 2, 4, 5, 8} ผลผลิต
4
คำอธิบาย
sum of all the elements =1+2+4+5+8 = 20, total number of elements = 5 Average will be = 20/5 = 4
ป้อนข้อมูล
arr[] = {10, 20, 30, 40} ผลผลิต
25
แนวทางที่ใช้ด้านล่างมีดังต่อไปนี้ในการแก้ปัญหา (Iterative)
-
วนซ้ำแต่ละองค์ประกอบของอาร์เรย์โดยใช้การวนซ้ำ
-
สรุปแต่ละองค์ประกอบของอาร์เรย์จนกระทั่งถึงจุดสิ้นสุดของอาร์เรย์
-
หารผลรวมด้วยจำนวนองค์ประกอบทั้งหมดแล้วส่งคืนค่าเฉลี่ย
อัลกอริทึม
Start
Step 1→ Declare function to calculate average using iterative method
double avg(int arr[], int size)
declare int sum = 0
Loop For int i=0 and i<size and i++
Set sum += arr[i]
End
return sum/size
Step 2→ In main()
Declare int arr[] = {2,3,1,6,8,10}
Declare int size = sizeof(arr)/sizeof(arr[0])
Call avg(arr, size)
Stop ตัวอย่าง
#include <iostream>
using namespace std;
//calculate average using an iterative method
double avg(int arr[], int size){
int sum = 0;
for (int i=0; i<size; i++)
sum += arr[i];
return sum/size;
}
int main(){
int arr[] = {2,3,1,6,8,10};
int size = sizeof(arr)/sizeof(arr[0]);
cout<<"average of an array using iterative method : "&l<t;avg(arr, size) << endl;
return 0;
} ผลลัพธ์
หากรันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้ -
average of an array using iterative method : 5
วิธีการแบบเรียกซ้ำ
ดังนั้นวิธีการแบบเรียกซ้ำคืออะไร? ในวิธีแบบเรียกซ้ำ เราเรียกฟังก์ชันซ้ำแล้วซ้ำอีกจนกว่าเราจะได้ผลลัพธ์ที่ต้องการ ในแนวทางแบบเรียกซ้ำ ค่าที่ส่งคืนโดยฟังก์ชันจะถูกเก็บไว้ในหน่วยความจำสแต็ก
มาดูตัวอย่างกันและอภิปรายว่าจะใช้วิธีการวนซ้ำได้อย่างไร
ป้อนข้อมูล
arr[] = {2, 4, 6, 8} ผลผลิต
5
คำอธิบาย
sum of all the elements =2+4+6+8 = 20, total number of elements = 4 Average will be = 20/4 = 5
ป้อนข้อมูล
arr[] = {12, 23, 45, 15} ผลผลิต
19
แนวทางที่ใช้ด้านล่างมีดังต่อไปนี้ในการแก้ปัญหา (แบบเรียกซ้ำ
-
เราจะเรียกฟังก์ชันนี้ซ้ำแล้วซ้ำเล่าจนกว่าจะถึงจุดสิ้นสุดของอาร์เรย์
-
เราจะรวมทุกองค์ประกอบของอาร์เรย์ และเมื่อเราไปถึงจุดสิ้นสุดของอาร์เรย์ เราจะคืนค่าค่าเฉลี่ยของอาร์เรย์
อัลกอริทึม
Start
Step 1→ Declare function to calculate average using recursive method
double recursive(int arr[],int i, int size)
IF (i == size-1)
return arr[i]
End
IF (i == 0)
return ((arr[i] + recursive(arr, i+1, size))/size)
End
return (arr[i] + recursive(arr, i+1, size))
Step 2→ double avg(int arr[], int size)
return recursive(arr, 0 , size)
Step 3→ In main()
Declare int arr[] = {1,5,3,2,6,7}
Declare int size = sizeof(arr)/sizeof(arr[0])
Call average(arr, size)
Stop ตัวอย่าง
#include <iostream>
using namespace std;
//function for calculating average recusively
double recursive(int arr[],int i, int size){
if (i == size-1)
return arr[i];
if (i == 0)
return ((arr[i] + recursive(arr, i+1, size))/size);
return (arr[i] + recursive(arr, i+1, size));
}
//function for returning average
double average(int arr[], int size){
return recursive(arr, 0 , size);
}
int main(){
int arr[] = {1,5,3,2,6,7};
int size = sizeof(arr)/sizeof(arr[0]);
cout<<average of an array using a recursive approach is : "<<average(arr, size) << endl;
return 0;
} ผลลัพธ์
หากรันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้ -
average of an array using a recursive approach is : 4