CS1010 Notes
  • Welcome
  • Lec/Tut/Lab/Exes
    • Lecture
      • Lec 01 - Computational Problem Solving
      • Lec 02 - Functions and Types
      • Lec 03 - Basic C Programming
      • Lec 04 - Conditionals
      • Lec 05 - Loops
      • Lec 06 - Call Stacks, Arrays
        • Diagnostic Quiz
      • Lec 07 - Pointers, Memory management
        • Diagnostic Quiz
      • Lec 08 - Multi-d Array, Efficiency
        • Diagnostic Quiz
      • Lec 09 - Searching and Sorting
        • Diagnostic Quiz
      • Lec 10 - More Recursion
        • Diagnostic Quiz
      • Lec 11 - Strcut & Standard I/O
        • Diagnostic Quiz
      • Lec 12 - Recap
    • Tutorial
      • Tut 01 - Computational Problem-Solving
      • Tut 02 - Functions and Conditionals
      • Tut 03 - More on Conditionals
      • Tut 04 - Loops
      • Tut 08 - Searching and Sorting
    • Lab
      • Lab 01 - Unix/Vim Setup
      • Lab 02 - Debugging
      • Lab 03 - Assert
      • Lab 04 - Test Cases
      • Lab 05 - Arrays
      • Lab 06 - Memory Errors
      • Lab 07 - Compiling with Clang
      • Lab 08 - C Preprocessor
      • Lab 09 - Backtracking
      • Lab 10 - Struct and Wrap up
    • Exercises
      • Exercise 3 - Fixed-Length Arrays
      • Exercise 4 - Dynamic Arrays and Strings
      • Exercise 6 - Searching and Sorting
      • Exercise 7 - More Recursion
      • Exercise 8 - Struct
  • Past Year Exam
    • Midterm PE
      • PE1 (AY18/19)
      • PE1 (AY20/21)
      • PE1 (AY21/22)
      • PE0 (AY22/23)
      • PE0 (AY23/24)
    • Midterm Paper
      • Midterm (AY18/19)
      • Midterm (AY20/21)
      • Midterm (AY21/22)
      • Midterm (AY22/23)
    • PE1 Review
      • PE1 (AY23/24)
    • PE2 Review
      • PE2 (AY18/19)
      • PE2 (AY20/21)
      • PE2 (AY21/22)
      • PE2 (AY22/23)
      • PE2 (AY23/24)
    • Final Paper
      • Final (AY18/19)
      • Final (AY20/21)
      • Final (AY21/22)
      • Final (AY22/23)
      • Final (AY23/24)
  • Current Year Exam
    • PE0 (AY24/25)
    • PE1 (AY24/25)
    • PE2 (AY24/25)
    • Final (AY24/25)
  • Toolbox
    • Vim & Unix
    • GDB
  • After CS1010
Powered by GitBook
On this page
  • Selected Problems from Exercise 1
  • Wishful Thinking
Edit on GitHub
  1. Lec/Tut/Lab/Exes
  2. Lab

Lab 02 - Debugging

Thanks for my Lab Tutor Zhang Puyu!

PreviousLab 01 - Unix/Vim SetupNextLab 03 - Assert

Last updated 6 months ago

Slides:

Selected Problems from Exercise 1

Wishful Thinking

Before we talk about the wishful thinking, let's get a quick review of the Mathematical Induction

Mathematical Induction

Suppose we want to find the value of P(n)P(n)P(n) for any non-negative interger nnn, we only need to do two things:

  1. Find P(0)P(0)P(0).

  2. Find a way to get P(k+1)P(k+1)P(k+1) based on the value of P(k)P(k)P(k).

The so called "Wishful Thinking" is just the reverse of above!

Wishful Thinking

Suppose we already know:

  1. How to compute P(k+1)P(k+1)P(k+1) using P(k)P(k)P(k);

  2. The value of P(0)P(0)P(0), i.e., "the base case" (or terminating condition)

Now we want to find P(n)P(n)P(n), and so we can just find P(n−1)P(n-1)P(n−1) first. To find P(n−1)P(n-1)P(n−1), we just need to find P(n−2)P(n-2)P(n−2) first... the cycle goes on until we reach P(0)P(0)P(0) where the recursion terminates.

95KB
Lab2.pdf
pdf
Lab 2 Slides