What is Recursion ?
คือ โปรแกรมย่อยที่เรียกใช้ตัวเอง
วิธีการเขียนรีเคอร์ซีฟแบบง่ายๆ คือ
1. ต้องเข้าใจโจทย์ให้ชัดเจนก่อน
2. หาจุดวกกลับ จุดที่หยุดการเรียกตัวเองซ้ำ
3. หาขั้นตอนที่เรียกตัวเองซ้ำ
รูปแบบทั่วไปของรีเคอร์ซีฟมักจะเป็นแบบนี้
function (){
if( เงื่อนไขที่ทำให้หยุดการเรียกตัวเองซ้ำ base case){
ส่งคืนคำตอบ
}else{
แยกปัญหาเป็นประเด็นย่อย เรียกตัวเองซ้ำ recursive case
}
return คำตอบ
}
Example เขียน ฟังก์ชั่น รีเคอร์ซีฟ เพื่อรับค่า n เป็นชนิดจำนวนเต็ม เพื่อหาค่า n !
วิเคราะห์ปัญหา
1. นิยามของ n ! คือ n * (n-1) * (n-2) * ... * 3 * 2 * 1 โดยที่ n >= 0
2. หาจุดวกกลับ โจทย์ข้อ นี้ คือ 0 ! เพราะค่าของ n จะลดลงเรื่อย ไปจนถึง 0
3. หาขั้นตอนการเรียกรีเคอร์ซีฟ จากนิยามเราจึงสรุปได้ ดังนี้
n ! = n * (n-1)!
เช่น 5 ! = 5 * 4 * 3 * 2 * 1 = 120 โดย n = 5
หลักการรีเคอร์ซีฟ คือ การเรียกใช้ตัวเองซ้ำ
5 ! = 5 * 4 ! 5 * 24 = 120
4 ! = 4 * 3 ! 4 * 6 = 24
3 ! = 3 * 2 ! 3 * 2 = 6
2 ! = 2 * 1 ! 2 * 1 = 2
1 ! = 1 * 0 ! 1 * 1 = 1
0 ! = 1 // จุดนี้ คือ base case นั้นเอง
ตัวอย่างโปรแกรม
#include <iostream>
#include <stdio.h>
using namespace std;
float factorial(int n);
float factorial(int n){
float fact;
if(n==1){ // base case
fact=1;
}else{ // recursive case
fact=n*factorial(n-1);
}
return fact;
}
int main(){
int n;
float sum;
cout <<"Input Number : ";
cin >>n;
sum=factorial(n);
printf("factorial of %d is %.2f",n,sum);
return 0;
}
เป็นตัวอย่างเล็กๆ น้อยๆ ของการเขียนโปรแกรมแบบ recursive หวังว่าคงจะเป็นประโยชน์กันนะครับ ^^
ขอบคุณมากครับ เก็ตกันเลยทีเดียว
ReplyDelete