ตัวอย่างโค้ด
<?php
function even_nums_avg($val) {
return $val + 1;
}
$val = 11;
echo "The average of the first n natural numbers that are even is " . even_nums_avg($val);
?>
ผลลัพธ์
The average of the first n natural numbers that are even is 12
คำอธิบายและแก้ไข
ปัญหา: ฟังก์ชัน even_nums_avg($val) คืนค่า $val + 1 ซึ่งไม่ใช่ค่าเฉลี่ยของ N จำนวนคู่แรก
ความเข้าใจที่ถูกต้อง:
- N จำนวนคู่แรก: 2, 4, 6, ..., 2N
- Sum = 2(1+2+...+N) = 2×N(N+1)/2 = N(N+1)
- Average = Sum/N = N+1
ดังนั้น ถ้า $val = N (จำนวนของ Even Numbers) → Average = N+1 = 12 ✓
แต่ถ้า $val = ค่าสูงสุด (Max Value) → Logic แตกต่าง
Clarification
<?php
// Case 1: $val = count of even numbers (N)
function avg_first_n_evens($n) {
return $n + 1; // Correct: avg of 2,4,...,2n = n+1
}
// Case 2: $val = maximum value (find evens up to $val)
function avg_evens_upto($max) {
$last_even = ($max % 2 == 0) ? $max : $max - 1;
$count = $last_even / 2;
$sum = $count * ($count + 1); // n(n+1)
return $sum / $count; // = $count + 1 = $last_even/2 + 1
}
echo "Avg of first 11 evens: " . avg_first_n_evens(11) . "\n"; // 12
echo "Avg of evens up to 11: " . avg_evens_upto(11) . "\n"; // 6 (2,4,6,8,10 → avg=6)
?>
ผลลัพธ์
Avg of first 11 evens: 12 Avg of evens up to 11: 6