1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>

bool is_number_in_array(int n, int* numbers, size_t len) {
    if(len == 0) {
        return false;
    }
    else if(len == 1) {
        return (n == numbers[0] ? true : false);
    }
    else {
        size_t len_0 = (len + 1) / 2;
        size_t len_1 = len / 2;
        assert(len_0 + len_1 == len);
        int* numbers_0 = numbers;         // first subarray starts at same point as numbers
        int* numbers_1 = numbers + len_0; // second subarray starts right after first
        if(n < numbers_1[0]) {
            return is_number_in_array(n, numbers_0, len_0);  // RECURSIVE CALL <<<<<<<
        }
        else {
            return is_number_in_array(n, numbers_1, len_1);  // RECURSIVE CALL <<<<<<<
        }
    }
}

int main(int argc, char* argv[]) {
    int primes[] = { 2, 3, 5, 7, 11, 13, 17, 19 };
    int n = 7;
    size_t num_primes = sizeof primes / sizeof primes[0];  // ONLY use this for static array

    printf("%d %s prime", n, is_number_in_array(n, primes, num_primes) ? "is" : "is NOT");
    
    return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */

© Copyright 2023 Alexander J. Quinn         This content is protected and may not be shared, uploaded, or distributed.