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

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างของภาษา C ในโปรแกรมที่พัฒนาด้วยภาษา C ทุกโปรแกรมจะมีโครงสร้างการพัฒนาไม่แตกต่างกัน ซึ่งประกอบด้วย 6 ส่วนหลัก ๆ โดยที่แต่ละส่วนจะมีหน้าที่แตกต่างกัน.
Advertisements

รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
อัลกอริทึ่มทำงานวนซ้ำ
บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงาน.
คำสั่ง while และ คำสั่ง do..while
ครั้งที่ 8 Function.
Department of Computer Business
Functional programming part II
Data Structures and Algorithms
Lecture No. 3 ทบทวนทฤษฎีและแบบฝึกหัด
หลักการโปรแกรม 1 Lecture 3: ตัวแปร, นิพจน์คณิตศาสตร์, การคำนวณทางคณิตศาสตร์,การดำเนินการกับสายอักขระ.
Lecture 13: ฟังก์ชันเรียกตัวเอง
ฟังก์ชัน (Function).
Structure Programming
Structure Programming
LAB # 4 Computer Programming 1 1. พิจารณาโปรแกรมต่อไปนี้
ลักษณะการทำงานของ Stack
LAB # 4.
Function.
Week 6 ประกาศค่าตัวแปร.
บทที่ 3 พื้นฐานการเขียนโปรแกรม Visual Basic
บทที่ 4 การตัดสินใจในการเขียนโปรแกรม
คำสั่งเพื่อการกำหนดเงื่อนไข
CE 112 บทที่ 5 การทำซ้ำในภาษา C
โครงสร้างภาษาซี.
วิชา การออกแบบและพัฒนาซอฟต์แวร์
ฟังก์ชั่น function.
ปฏิบัติการครั้งที่ 9 ฟังก์ชัน.
โปรแกรมย่อย : Pascal Procedure
บทที่ 1. พื้นฐานความรู้ทั่วไป
สมการเชิงอนุพันธ์อย่างง่าย
ฟังก์ชัน (Function).
การประกาศตัวแปร “ตัวแปร” คือสิ่งที่เราสร้างขึ้นมาเพื่อใช้เก็บค่าต่างๆและอ้างอิงใช้งานภายในโปรแกรม ตามที่เรากำหนดขึ้น การสร้างตัวแปรขึ้นมาเราเรียกว่า.
Arrays.
C Programming Lecture no. 6: Function.
การออกแบบโปรแกรมอย่างมีโครงสร้าง Structured Design
การเขียนผังงานแบบโครงสร้าง
บทที่ 1 หลักการเขียนโปรแกรมเชิงวัตถุ
ข้อมูลพื้นฐานและตัวดำเนินการ
คำสั่งควบคุมการทำงาน
การสร้างฟังก์ชั่นเพื่อพัฒนาโปรแกรม Interactive C
ฟังก์ชัน ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ ศูนย์คอมพิวเตอร์
คำสั่ง for ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
บทที่ 5 ฟังก์ชันกับอาร์เรย์ Function & Array
โครงสร้างข้อมูลคืออะไร ?
เสรี ชิโนดม ฟังก์ชัน เสรี ชิโนดม
โปรแกรมประยุกต์อื่นๆ
Recursion การเรียกซ้ำ
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
ฟังก์ชัน.
วิชา วิศวกรรมซอฟต์แวร์ (Software Engineering)
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)
หลักการเขียนโปรแกรม ( )
หลักการเขียนโปรแกรม ( )
กองซ้อน ยอดกองซ้อน (stack).
หลักการสร้างสรรค์ชุดคำสั่ง ๓
PHP การตรวจสอบเงื่อนไข.
อัลกอริทึ่มทำงานวนซ้ำ
บทที่ 9 พอยเตอร์. สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อ การศึกษาเท่านั้น พอยเตอร์ (Pointer) พอยเตอร์คือต้นฉบับของชนิดข้อมูล เป็นชนิด ข้อมูลที่สร้างจากข้อมูลมาตรฐานชนิดหนึ่ง.
Recursive Method.
การเขียน แบบวนซ้ำ , วนลูป
CONDITION Computer Programming Asst. Prof. Dr. Choopan Rattanapoka.
โครงสร้างข้อมูลและอังกอลิทึม
แนะนำการเขียนโปรแกรมภาษา C Introduction to C Programming Language
ตัวแปร และชนิดข้อมูล.
Function ธนวัฒน์ แซ่ เอียบ. What is a function ฟังก์ชันในภาษา C เป็นโปรแกรมที่ถูกออกแบบมาเพื่อ ใช้แก้ปัญหางานใดงานหนึ่งโดยเฉพาะ ฟังก์ชันจะเปลี่ยน input.
Function. วัตถุประสงค์การเรียนรู้ ให้รู้จักว่าฟังก์ชันคืออะไร ให้รู้จักว่าเราสร้างฟังก์ชันเพื่อจุดประสงค์ใด หรือ เพื่อประโยชน์ใด ให้รู้จักประเภทของฟังก์ชัน.
การทำซ้ำ Pisit Nakjai.
Computer Programming การเขียนโปรแกรม คอมพิวเตอร์ สัปดาห์ที่ 6 คำสั่งควบคุมการทำงานแบบ เงื่อนไขและคำสั่งควบคุมการ ทำงานแบบวนซ้ำ.
Nested loop.
ใบสำเนางานนำเสนอ:

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

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

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

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

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

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

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

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

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

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

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

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

--ให้ส่งค่ากลับมาโดยให้ตัวแปร 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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