อัลกอริทึม C/C++

Recursion และ Call Stack

Recursive function ต้องมี base case และเคลื่อนไปหา base case

Recursion และ Call Stack คืออะไร?

Recursive function ต้องมี base case และเคลื่อนไปหา base case

แก้ปัญหาด้วย instance ที่เล็กลง

ประเด็นสำคัญ

  • ทดสอบ input ว่าง หนึ่งสมาชิก ซ้ำ และเรียงแล้ว
  • แยก correctness จาก optimization
  • ใช้ standard library ใน production เมื่อเหมาะสม

ตัวอย่างโค้ด C และ C++

C
รันโค้ด →
main.c
#include <stdio.h>

unsigned long long factorial(unsigned number) {
    return number < 2 ? 1 : number * factorial(number - 1);
}

int main(void) {
    printf("%llu\n", factorial(6));
}
ผลลัพธ์ที่คาดหวัง
720
C++
รันโค้ด →
main.cpp
#include <iostream>

constexpr unsigned long long factorial(unsigned number) {
    return number < 2 ? 1 : number * factorial(number - 1);
}

int main() {
    constexpr auto value = factorial(6);
    std::cout << value << '\n';
}
ผลลัพธ์ที่คาดหวัง
720

เปรียบเทียบ C และ C++

Factorial ใช้เวลา O(n) และ stack O(n) input ใหญ่ควร validate และพิจารณา iterative solution

C

Loop, pointer, length และ buffer เขียนอย่างชัดเจน

C++

Iterator และ algorithm แยก operation จาก storage

แบบฝึกหัด

รันทั้งสองเวอร์ชันแล้วแก้ไขเพื่อสังเกตความแตกต่างของภาษา

  • ไล่ตามทุก comparison
  • ทดสอบ duplicate และ extreme value
  • Benchmark กับ standard library