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

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

Recursive Method.

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


งานนำเสนอเรื่อง: "Recursive Method."— ใบสำเนางานนำเสนอ:

1 Recursive Method

2 บทนำ การทำงานภายใน method หนึ่งสามารถเรียกใช้ method อื่นได้
method a เรียกใช้ method b method b เรียกใช้ method a method a เรียกใช้ตัวเอง

3 Method แบบเรียกตัวเองซ้ำ (recursive method)

4 Method แบบเรียกซ้ำ คือการที่ method เรียกใช้งาน method ของตัวเองซ้ำๆภายใน method นั้น คล้ายกับการทำงานแบบ loop แต่จะไม่คำสั่ง while หรือ for ปรากฎอยู่เลย

5 Recursive Programming
การเขียนโปรแกรมให้ method ใด method หนึ่ง หรือ หลาย method เรียกใช้ method ตัวเองซ้ำภายใน method นั้นไปเรื่อยๆ จนกว่าจะหลุดพ้นจากเงื่อนไขที่ตั้งไว้

6 Method แบบเรียกซ้ำ ทำไมต้องเขียน method แบบเรียกตัวเองซ้ำๆ
บางกรณีการเขียนโปรแกรมลักษณะนี้ทำให้ได้โปรแกรมที่สั้น สามารถเขียนคำสั่งได้ตรงไปตรงมาตามคำนิยามทางคณิตศาสตร์ ได้โปรแกรมที่สวย (ขึ้นกับรสนิยม) อ่านเข้าใจง่าย

7 ตัวอย่าง recursive method
กําหนดให้เมท็อด f(…) ใช้หาผลบวกของตวัเลขจํานวนเต็มตั้งแต่ 0 จนถึง n โดยที่ f(n) = ( … +n)

8 ขั้นตอนการทำงานของ recursive method
ประกอบด้วย 2 กรณี Recursion case เป็นกรณีที่ method คืนค่าที่เกิดจากการเรียกใช้ method ของตัวมันเอง เช่น return fac(n-1), return fibo(n-1) + fibo(n-2) เป็นต้น เสมือนเป็นการเรียกซ้ำ เมท็อดตัวเองอีกครั้งอยู่ภายใน method นั้น โดยจะเรียกซ้ำแบบนี้ไปเรื่อยๆ จนกว่าจะเข้าสู่ Base case จึงจะหยุดการเรียกซ้ำ Base case เป็นกรณีสิ้นสุดการเรียกตัวเองซ้ำ ซึ่ง method จะคืนค่าคงที่ค่าใดค่าหนึ่งออกมา เช่น return 0 , return 1 เป็นต้น

9 จงแสดงผลลัพธ์จากการเรียกใช้ recursive method
คำตอบ mul(4,3) 3 + mul(3, 3) 3 + (3 + mul(2,3)) (3 + mul(1,3)) (3 + mul(0,3)) = 12 mul(5,7) = 35 mul(20,10) … = 200

10 จงแสดงผลลัพธ์จากการเรียกใช้ recursive method
คำตอบ gcd(28,16) gcd(16 , 12) gcd(12, 4) 4 gcd(9,14) gcd(14, 9) gcd(9,5) gcd(5,4) gcd(4,1) 1 การเรียกใช้ คำตอบ gcd(75,30) gcd(30,15) 15

11 จงแสดงผลลัพธ์จากการเรียกใช้ recursive method
expo(3) 8 4 4 2 2 2 2 1 1 1 1 1 1 1 1

12 Recursive อย่างง่าย ขั้นตอนการแปลงสมการคณิตศาสตร์ให้เป็น recursive method แบบง่าย EX. จงหาผลบวกของตัวเลขจํานวนเต็มตั้งแต่ 0 จนถึง n (โดยที่ n ≥ 0) แปลงโจทย์ที่กําหนดให้ เป็นสมการหรือฟังก์ชันทางคณิตศาสตร์ หรือสมการในรูปทั่วไป แยกสมการออกเป็น 2 กรณี (หรืออาจจะมากกว่า 2 กรณีก็ได้) กรณีที่สมการเท่ากับค่าของพจน์แรกเพียงพจน์เดียวซึ่งจะได้ (2) กรณีที่สมการอยู่ในรูปทั่วไป แต่จะดึงพจน์สุดท้ายออกมาให้เห็นในสมการซึ่งจะได้

13 Recursive อย่างง่าย ขั้นตอนการแปลงสมการคณิตศาสตร์ให้เป็น recursive method แบบง่าย EX. จงหาผลบวกของตัวเลขจํานวนเต็มตั้งแต่ 0 จนถึง n (โดยที่ n ≥ 0) แปลงสมการทั้ง 2 กรณีที่ได้จากขั้นตอนที่ 2 ให้เป็น method โดยใช้คําสั่ง if-else เพื่อระบุ เงื่อนไขของแต่ละกรณี ซึ่งจะให้กรณีที่ 1 เป็น Base case และกรณีที่ 2 เป็น recursion case

14 ตัวอย่าง จงพิจารณาสมการต่อไปนี้เพื่อเขียนเป็น method f(…) ที่ทำงานแบบ recursive โดยให้รับค่า n เข้ามาทางพารามิเตอร์ n=1 , f(1) = 1 f(n) = f(n-1) + (1/n3)

15 ตัวอย่าง จงพิจารณาสมการต่อไปนี้เพื่อเขียนเป็น method f(…) ที่ทำงานแบบ recursive โดยให้รับค่า n เข้ามาทางพารามิเตอร์ f(1) = (1) = 3 f(n) = f(n-1) + (nn + 2n)

16 ตัวอย่างการเขียน method แบบเรียกซ้ำ
ผลบวก … + n เราสามารถเขียน method หาผลบวก int sum(int n) เพื่อคืนผลบวก … + n ได้ไม่ยาก สมมุติว่าไม่ใช้สูตร เราคงเขียน method โดยการใช้ loop

17 ตัวอย่างการเขียน method แบบเรียกซ้ำ
ผลบวก … + n จากนิยาม Sn = Sn-1 + n เมื่อ n > 0 และ S0 = 0 เราสามารถเขียน method แบบเรียกซ้ำ สั้นๆ ได้ ดังนี้ public static int sum(int n) { if(n==0) { return 0; } else{ sum = sum(n-1) + n; } return sum;

18 จำนวนฟิโบนักชี จำนวนฟิโบนักชี (Fibonacci number) คือ จำนวนในลำดับ 0, 1, 1, 2, 3, 5, 8, 13, … ให้ fn คือ จำนวนฟิโบนักชีตัวที่ n จะได้ว่า fn = fn-1 + fn-2 เมื่อ n >= 2 และ f0 = 1, f1 = 1

19 จำนวนฟิโบนักชี นิยาม fn = fn-1 + fn-2 เมื่อ n >= 2 และ f0 = 1, f1 = 1 ลักษณะปัญหาเช่นนี้ เหมาะที่จะแปลงเป็น method แบบเรียกซ้ำ ลองเขียนโปรแกรมกัน ^^

20 จำนวนฟิโบนักชี public static int fib(int n){ if(n <= 1) { return n; // f0 = 1, f1 = 1 } else { return fib(n-1) + fib(n-2) ; // fn = fn-1 + fn-2 }


ดาวน์โหลด ppt Recursive Method.

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


Ads by Google