คำนวณค่าเฉลี่ย
เราทุกคนรู้วิธีคำนวณค่าเฉลี่ยแบบวนซ้ำ:
def average(nums):
result = 0
for num in nums:
result += num
return result/len(nums)
ลองเขียนวิธีแก้ปัญหาแบบ recursion ดูบ้าง สูตรสำหรับอัปเดตค่าเฉลี่ยเมื่อได้รับค่าใหม่อาจเป็นประโยชน์:
$$ \bar{x} \leftarrow \frac{x_i + (n-1)\bar{x}}{n} $$
โดยที่ \(\bar x\) คือค่าเฉลี่ย, \(x_i\) คือค่าใหม่ที่ป้อนเข้ามาเพื่ออัปเดตค่าเฉลี่ย และ \(n\) คือหมายเลขของการเรียกแบบ recursive (ไม่นับการเรียกฟังก์ชันครั้งแรก)
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python
คำแนะนำการฝึกหัด
- กำหนด base case สำหรับอัลกอริทึม
- กำหนดการเรียกแบบ recursive เพื่ออัปเดตค่าเฉลี่ย
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Calculate an average value of the sequence of numbers
def average(nums):
# Base case
if len(nums) == ____:
return ____[____]
# Recursive call
n = len(nums)
return (____ + ____ * ____) / ____
# Testing the function
print(average([1, 2, 3, 4, 5]))