Skip to content

Instantly share code, notes, and snippets.

@luooooob
Created July 18, 2022 19:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luooooob/ea06425f8c8e63f4fa0ad9bbe57a8664 to your computer and use it in GitHub Desktop.
Save luooooob/ea06425f8c8e63f4fa0ad9bbe57a8664 to your computer and use it in GitHub Desktop.
尾递归教学
#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));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment