To Iterate is Human, to Recurse, Divine 人理解迭代,神理解递归
阶乘
int factorial(int n) {
if (n == 1) return 1;
return n * factorial(n - 1);
}
斐波那契数列
long long fibo(long long n) {
if (n == 1 || n == 2) return n;
return fibo(n - 1) + fibo(n - 2);
}
字符逆序
void reverse() {
char c;
scanf("%c", &c);
if (c == '\n') return;
reverse(c);
printf("%c", c);
}
打印三角形
int tower(int level, int move) {
int current_level = level - move;
int star = move * 2 - 1;
for (int i = 0; i < (level - move); i++) printf(" ");
for (int i = 0; i < star; i++) printf("* ");
printf("\n");
if (move >= level) return 1;
tower(level, move + 1);
printf("\n");
}
打印棱形
int tower(int level, int move) {
int current_level = level - move;
int star = move * 2 - 1;
for (int i = 0; i < (level - move); i++) printf(" ");
for (int i = 0; i < star; i++) printf("* ");
printf("\n");
if (move >= level) return 1;
tower(level, move + 1);
for (int i = 0; i < (level - move); i++) printf(" ");
for (int i = 0; i < star; i++) printf("* ");
printf("\n");
}
二分查找
int binarySearch(int *a, int target, int l, int r) {
if (l <= r) {
int mid = (r + 1 + l) / 2;
if (*(a + mid) == target) return mid;
if (*(a + mid) > target) return binarySearch(a, target, l, mid);
if (*(a + mid) < target) return binarySearch(a, target, mid, r);
}
return -1;
}