# CSPT23 Lecture 8
## [Binary Search](https://leetcode.com/problems/binary-search/)
```
class Solution:
"""
target = 5
nums = [1,2,3,4,5(min)(max)(mid)]
minIndex = 4
maxIndex = 4
midIndex = 4
"""
def search(self, nums: List[int], target: int) -> int:
return self.searchHelper(nums, target, 0, len(nums) - 1)
def searchHelper(self, nums, target, minIndex, maxIndex):
if minIndex > maxIndex:
return -1
midIndex = (minIndex + maxIndex) // 2
if nums[midIndex] == target:
return midIndex
elif nums[midIndex] < target:
return self.searchHelper(nums, target, midIndex + 1, maxIndex)
else:
return self.searchHelper(nums, target, minIndex, midIndex - 1)
def iterativeSearch(self, nums: List[int], target: int) -> int:
minIndex, maxIndex = 0, len(nums) - 1
while minIndex <= maxIndex:
midIndex = (minIndex + maxIndex) // 2
if nums[midIndex] == target:
return midIndex
elif nums[midIndex] < target:
minIndex = midIndex + 1
else:
maxIndex = midIndex - 1
return -1
```
## [Guess Number](https://leetcode.com/problems/guess-number-higher-or-lower/)
```
# The guess API is already defined for you.
# @param num, your guess
# @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
# def guess(num: int) -> int:
class Solution:
def guessNumber(self, n: int) -> int:
min, max = 1, n
while min <= max:
mid = (min + max) // 2
res = guess(mid)
if res == 0:
return mid
elif res == 1:
min = mid + 1
else:
max = mid - 1
return -1
```
## [Fibonacci](https://leetcode.com/problems/fibonacci-number/)
```
class Solution:
def fib(self, n: int) -> int:
if n == 0:
return 0
if n == 1:
return 1
return self.fib(n - 1) + self.fib(n - 2)
```