C语言基础 - 递归

194 阅读1分钟

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;
}

汉诺塔

二叉树深度