โจทย์
พิมพ์ชื่อ 10 ครั้ง **ห้ามใช้ Loop (for/while/do-while) และห้ามใช้ goto**
วิธีแก้: Recursion (ฟังก์ชันเรียกตัวเอง)
#include <stdio.h>
void printName(char *name, int count) {
if (count >= 10) return; // Base Case
printf("%03d: %s\n", count + 1, name);
printName(name, count + 1); // Recursive Call
}
int main() {
char name[50];
printf("Enter your name: ");
scanf("%49s", name);
printName(name, 0);
return 0;
}
ผลลัพธ์:
Enter your name: TutorialsPoint
001: TutorialsPoint
002: TutorialsPoint
003: TutorialsPoint
004: TutorialsPoint
005: TutorialsPoint
006: TutorialsPoint
007: TutorialsPoint
008: TutorialsPoint
009: TutorialsPoint
010: TutorialsPoint
อธิบายการทำงาน Recursion
printName("TutorialsPoint", 0)
→ print 001, call printName(..., 1)
→ print 002, call printName(..., 2)
...
→ print 010, call printName(..., 10)
→ count >= 10 → RETURN (Base Case)
← RETURN
← RETURN
← RETURN
← RETURN
เปรียบเทียบ: Loop vs Recursion
| ด้าน | Loop (Iterative) | Recursion |
|---|---|---|
| Memory | O(1) Constant | O(n) Stack Frames |
| Speed | เร็วกว่า | ช้ากว่า (Function Call Overhead) |
| Readability | ตรงไปตรงมา | Elegan สำหรับบางโจทย์ |
| Stack Overflow Risk | ไม่มี | มี (ถ้า Recursion ลึกมาก) |