# Lecture 001


int pow(int a, int b)
//@requires b>= 0;
{
if (b == 0) return 1;
return pow(a, b-1) *a;
}

:warning: check what pow(a, b-1) returns when b==0; we certainly want it to return a value other than 1 and a function. The function above will return 1 and exit.

int f(int x, int y)
//@requires y>=0
//@ensures \result == pow(a, b)
{
int a = x;
int b = y;

int r = 1;
while (y>1) {
if (y % 2 == 1) {
r = x*r;
}
x = x*x;
y = y/2;
}

}


:warning: //@requires should be before curly braces :warning: \result can only take the value after the function runs, so you have to copy the value. Otherwise, it should raise an error.

:warning: one-line comment @requires should be like the following, remember the @ :warning: the first function is O(n) while the second is O(log n)

/*@requires e>=0 @*/


:question: does c0 only have int? :question: when does = assigns a pointer, not a actual value

Table of Content