งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงานลักษณะของฟังก์ชั่นมีความรอบรัดสั้นกว่าแบบวนลูป.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงานลักษณะของฟังก์ชั่นมีความรอบรัดสั้นกว่าแบบวนลูป."— ใบสำเนางานนำเสนอ:

1 บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงานลักษณะของฟังก์ชั่นมีความรอบรัดสั้นกว่าแบบวนลูป ซึ่งเป็นการตรวจสอบกฎเกณฑ์ที่กำหนดขึ้นมาทางคณิตศาสตร์ กำหนดให้มีการเรียกตัวเองขึ้น

2 รีเคอร์ซีฟ(ต่อ) การทำงานประกอบด้วย 2 ส่วนคือ 1. กรณีพื้นฐาน (Base Case) เป้นส่วนที่ค่าของฟังก์ชันสอดคล้องหรือเท่ากับค่าของพารามิเตอร์ที่ส่งมาหรือปัญกาได้ถูกต้องแก้ไขเพียงพอแล้ว ไม่มีการเรียกตัวเองขึ้นมาทำงานอีก

3 รีเคอร์ซีฟ(ต่อ) 2. เรียกตัวเอง (Recursive Call) เป็นส่วนที่ค่าของฟังก์ชันที่ถูกเรียกนำมาใช้กับค่าของพารามิเตอร์ที่ส่งมาหรือปัญหายังแก้ไขไม่เพียงพอ จะต้องเรียกตัวเองขึ้นมาทำงานต่อไปจนกว่าจะได้เป็นกรณีพื้นฐานจึงจบการทำงาน

4 2 * 24 2 * 23 ขั้นตอนการเรียกตัวเองทำงานของการหาค่าเลขยกกำลัง
โจทย์ ^5 2 * 24 ครั้งที่ 1 2 * 23 ครั้งที่ 2

5 2 * ครั้งที่ 3 * 22 2 * ครั้งที่ 4 * 2 21

6 2 * * 2 ครั้งที่ 5 20

7 2 * * 2 ครั้งที่ 6 2 = 1

8 2 * * 2 2 = 1 ขั้นตอนการถอยกลับทางเมของการหาค่าเลขยกกำลัง โจทย์ 2^5
โจทย์ 2^5 * 2 ครั้งที่ 1 2 = 1

9 2 * * 2 ครั้งที่ 2 20

10 2 * ครั้งที่ 3 * 2 21 2 * ครั้งที่ 4 * 22

11 2 * 23 ครั้งที่ 5 2 * 24 ครั้งที่ 6

12 การทำงานของฟังก์ชัน Power
#include <iostream.h> double power(double x,int n){ --ประกาศตัวแปรเป็น double และ int if(n==0) return 1; --คำสั่งการตรวจสอบถ้า n เท่ากับ 0 ให้ส่งค่ากลับมาเป็น 1

13 --ให้ส่งค่ากลับมาโดยให้ตัวแปร x คูณกับเลขยกกำลังคือ x และ
else return x*power(x,n-1); --ให้ส่งค่ากลับมาโดยให้ตัวแปร x คูณกับเลขยกกำลังคือ x และ n-1 หรือนำค่า x แล้วนำค่าตัวแปรxมาเลขยกกำลังกับตัวแปร n } ตัวอย่าง Input Base Number : 3 Input n Number : 5 Power of 3^5:243

14 int main() { int x,n; --ประกาศตัวแปรเป็นชนิด int 2 ตัวคือ x,n

15 cout<<"Input Base Number:";
cin>>x; --รับค่าเข้าตัวแปร x cout<<"Input n Number:"; --แสดงค่า Input n Number

16 cin>>n; --รับค่าเข้าตัวแปร n cout<<"Power of"<<x<<"^"<<n<<":"<<power(x,n)<<endl; --แสดงค่า Power of แล้วนำตัวแปร x ,^,n และ : --นำค่าทั้ง 2 ตัวคือ x และ n มายกกำลัง return 0; }

17 รับค่า n = 5; เข้ามาเก็บไว้ในหน่วยความจำ Memory
กำหนดค่าให้ตัวแปร x=2; และ n=5;

18 การหาตัวเลขไฟโบแนคซี (Fibonacci Number)
ฟังก์ชันรีเคอร์ซีฟ การทำงานในส่วนเรียกตัวเองให้ขึ้นมาจะมีการเรียกเพียงครั้งเดียว แต่บางฟังก์ชันอาจต้องมีการเรียกตัวเองขึ้นมาทำงานได้มากกว่าหนึ่งครั้ง การหาตัวเลขไฟโบแนคซี (Fibonacci Number) หมายถึง การนำค่าเริ่มต้น คือ 0 กับ 1 จากนั้นเลขถัดไปจะ เท่ากับเลขก่อนหน้าสองตัวบวกกัน

19 long fibonacci(int n) --ประกาศค่า long มีชื่อว่า fibonacci ให้มีชนิดเป็น int มีตัวแปรชื่อว่า n if(n<1) return 0; --โดยมีเงื่อนไขว่าถ้า n น้อยกว่า 1 ให้แสดงค่าเป็น 0

20 if(n==1) return 1; --ถ้า n เท่ากับ1ให้แสดงค่า 1 else return fibonacci(n-1)+fibonacci(n-2); --หรือให้แสดงค่า n ลบ 1 บวกกับ n ลบ2

21 ตัวอย่าง ครั้งที่ 1 1 = ครั้งที่ 2 1 2 = 3 ครั้งที่ 3 2 3 = 5

22 ครั้งที่ 4 3 5 = 8 ครั้งที่ 5 5 8 = 13 ครั้งที่ 6 8 13 = 21

23 ฟังก์ชันการหาค่าตัวเลขไฟโบแนคซีแบบวนลูป
long fiboI(int n){ --ประกาศค่า long มีชื่อว่า fiboI ให้มีชนิดเป็น int มีตัวแปรชื่อว่า n int i,f0,f1,f2; --ประกาศตัวแปรเป็นชนิดint 4 ตัว คือ i, f0, f1, f2

24 if(n<1) return 0; --มีเงื่อนไขว่าถ้า n มากกว่า 1 ให้แสดง 0 if(n<3) return 1; --แต่ถ้า n มากกว่า 3 ให้แสดง 1 f0=1; --โดยกำหนดให้ f1 มีค่าเท่ากับ 1 f1= โดยกำหนดให้ f1 มีค่าเท่ากับ 1

25 for(i=3;i<=n;i++) {
f2=f1+f0; f0=f1; --โดยกำหนดให้ f2 เท่ากับ f1 บวก f0 --แล้วให้ f0 เท่ากับ f1

26 f1=f2; --แล้วให้ f1 เท่ากับ f2 } return f2; --ให้ส่งค่าและแสดงค่า f2 คือ 7

27 f0 =5; f1 =2; f0 5 f1 2 f0 + f1 = f2 5 + 2 = 7 โดยให้ส่งค่าและแสดงค่าF2

28 = = = = f0 f1 ดังนั้น f0 จะมีค่าเท่ากับ 0 และ f1 จะมีค่าเท่ากับ 5 5 f1

29 ฟังก์ชันการหาค่าตัวเลขไฟโบแนคซีแบบใช้พื้นที่เพิ่ม
long fiboM(int n){ --ประกาศค่า long มีชื่อว่า fiboM ให้มีชนิดเป็น int มีตัวแปรชื่อว่า n int i; --ประกาศตัวแปรเป็นชนิด int โดยกำหนดให้ชื่อ i

30 long F[100]; --ประกาศตัวแปรเป็นชนิด long โดยกำหนดให้ชื่อ F มีการจองพื้นที่ไว้100 if(n<1) return 0; --มีเงื่อนไขว่าถ้า n มากกว่า 1 ให้แสดง 0 if(n<3) return 1; --แต่ถ้า n มากกว่า 3 ให้แสดง 1

31 F[1]=1; --โดยกำหนดให้ F[1] เท่ากับ 1 F[2]=1; --โดยกำหนดให้ F[2] เท่ากับ 1 for (i=3;i<=n;i++) { --โดยเงื่อนไขว่าให้ i เท่ากับ 3 แล้วให้ i มากกว่าหรือเท่ากับ n และให้ i++

32 F[i]=F[i-1]+F[i-2]; --โดยให้ F[i] เท่ากับ F[i-1] บวก F[i+2] return F[n]; --ส่งค่าและแสดงค่า F[n] }

33 5 2 + = + = 7 F[i-1] =5; F[i-2] =2; f0 f1 F[i-1] F[i-2] F[i] 5 2


ดาวน์โหลด ppt บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงานลักษณะของฟังก์ชั่นมีความรอบรัดสั้นกว่าแบบวนลูป.

งานนำเสนอที่คล้ายกัน


Ads by Google