Skip to content

Instantly share code, notes, and snippets.

@luooooob
Created July 18, 2022 19:02
Show Gist options
  • Save luooooob/ea06425f8c8e63f4fa0ad9bbe57a8664 to your computer and use it in GitHub Desktop.
Save luooooob/ea06425f8c8e63f4fa0ad9bbe57a8664 to your computer and use it in GitHub Desktop.

Revisions

  1. luooooob created this gist Jul 18, 2022.
    61 changes: 61 additions & 0 deletions rec.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,61 @@
    #include <stdio.h>

    /** 求和 */

    int sum_for(int i, int j) {
    int k;
    int sum = 0;
    for(k = i; k <= j; k++) {
    sum = sum + k;
    }

    return sum;
    }

    int sum_while(int i, int j) {
    int k = i;
    int sum = 0;

    while(1) {
    if (k == j) {
    sum = sum + k;
    break;
    } else {
    sum = sum + k;
    k = k + 1;
    }
    }

    return sum;
    }

    int sum_rec(int i, int j, int k) {
    int sum = 0;

    if (k == j) {
    sum = sum + k;
    } else {
    sum = sum_rec(i, j, k + 1) + k;
    }
    return sum;
    }

    int sum_tailrec(int i, int j, int sum) {
    if (i == j) {
    return sum + i;
    } else {
    return sum_tailrec(i + 1, j, sum);
    }
    }

    int sum_wtf(int i, int j, int sum) {
    return i == j ? sum + i : sum_wtf(i + 1, j, sum + i);
    }

    int main(int argc, char *argv[]) {
    printf("sum: %d\n", sum_for(1, 100));
    printf("sum: %d\n", sum_while(1, 100));
    printf("sum: %d\n", sum_rec(1, 100, 1));
    printf("sum: %d\n", sum_tailrec(1, 100, 0));
    printf("sum: %d\n", sum_wtf(1, 100, 0));
    }