Wednesday, November 14, 2012

recursive แบบ เริ่มต้น ^^

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 หวังว่าคงจะเป็นประโยชน์กันนะครับ ^^



1 comment:

  1. ขอบคุณมากครับ เก็ตกันเลยทีเดียว

    ReplyDelete