首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言的递归调用被这13道题整明白了

C语言的递归调用被这13道题整明白了

作者头像
C语言中文社区
发布2026-01-27 11:23:02
发布2026-01-27 11:23:02
1440
举报
文章被收录于专栏:C语言中文社区C语言中文社区

1.汉诺塔:请输入盘子数,输出盘子移动的操作步骤。

代码语言:javascript
复制
#include <stdio.h>

void move(char from, char to) {
   printf("%c to %c\n", from, to);
}

void hanoi(int n, char a, char b, char c) {
   if (n == 1)
       move(a, c);
   else {
       hanoi(n - 1, a, c, b);
       move(a, c);
       hanoi(n - 1, b, a, c);
  }
}

void main() {
   int n;
   scanf("%d", &n);
   hanoi(n, 'A', 'B', 'C');
}

2.爬楼梯:树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。

代码语言:javascript
复制
#include <stdio.h>

int stair(int n) {
   if (n == 1) return 1;
   if (n == 2) return 2;
   return stair(n - 1) + stair(n - 2);
}

void main() {
   int n;
   scanf("%d", &n);
   printf("%d", stair(n));
}

3.爬楼梯:树老师爬楼梯,他可以每次走1级、2级或者3级,输入楼梯的级数,求不同的走法数。

代码语言:javascript
复制
#include <stdio.h>

int stair(int n) {
   if (n == 1) return 1;
   if (n == 2) return 2;
   if (n == 3) return 4;
   return stair(n - 1) + stair(n - 2) + stair(n - 3);
}

void main() {
   int n;
   scanf("%d", &n);
   printf("%d", stair(n));
}

4.斐波那契数列:请输入项数,输出具体数列。

代码语言:javascript
复制
#include <stdio.h>

int fibonacci(int n) {
   if (n == 1 || n == 2)
       return 1;
   return fibonacci(n - 1) + fibonacci(n - 2);
}

void main() {
   int n, i;
   scanf("%d", &n);
   for (i = 1; i <= n; i++)
       printf("%d,", fibonacci(i));
}

5.求阶乘:请输入整数n,求1!+2!+3!+4!+5!+6!+7!+…+n!的和。

代码语言:javascript
复制
#include <stdio.h>

int factorial(int n) {
   if (n == 1) return 1;
   return n * factorial(n - 1);
}

void main() {
   int n, i, sum = 0;
   scanf("%d", &n);
   for (i = 1; i <= n; i++)
       sum += factorial(i);
   printf("sum=%d", sum);
}

6.取球问题:在n个球中,任意取m个(不放回),求有多少种不同取法。

代码语言:javascript
复制
#include <stdio.h>

int ball(int n, int m) {
   if (n < m)  return 0;
   if (n == m) return 1;
   if (m == 0) return 1;
   return ball(n - 1, m - 1) + ball(n - 1, m);
}

void main() {
   int n, m;
   scanf("%d%d", &n, &m);
   printf("%d", ball(n, m));
}

7.杨辉三角:输入要打印的层数,打印杨辉三角。

代码语言:javascript
复制
#include <stdio.h>

int triangle(int m, int n) {
   if (m == 0 || n == 0 || m == n)
       return 1;
   return triangle(m - 1, n) + triangle(m - 1, n - 1);
}

void main() {
   int n, i, j;
   scanf("%d", &n);
   for (i = 0; i < n; i++) {
       for (j = 0; j <= i; j++) {
           printf("%d ", triangle(i, j));
      }
       printf("\n");
  }
}

8.求年龄:有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁。问第4个人多少岁,他说比第3个人大2岁。问第3个人多少岁,他说比第2个人大2岁。问第2个人多少岁,他说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人多大?

代码语言:javascript
复制
#include <stdio.h>

int age(int n) {
   if (n == 1) return 10;
   return age(n - 1) + 2;
}

void main() {
   printf("%d", age(5));
}

9.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第十天早上想再吃时,见只剩下一个桃子了。问最初有多少个桃子。

递归:

代码语言:javascript
复制
#include <stdio.h>

int peach(int n) {
   if (n == 10) return 1;
   return (peach(n + 1) + 1) * 2;
}

void main() {
   printf("%d", peach(1));
}

循环:

代码语言:javascript
复制
#include <stdio.h>

void main() {
   int i, s = 1;
   for (i = 9; i >= 1; i--) {
       s = (s + 1) * 2;
  }
   printf("%d", s);
}

10.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。第十天同样是吃了前一天的一半加一个,最后剩下一个桃子。问最初有多少个桃子。

递归:

代码语言:javascript
复制
#include <stdio.h>

int peach(int n) {
   if (n == 11) return 1;
   return (peach(n + 1) + 1) * 2;
}

void main() {
   printf("%d", peach(1));
}

循环:

代码语言:javascript
复制
#include <stdio.h>

void main() {
   int i, s = 1;
   for (i = 10; i >= 1; i--) {
       s = (s + 1) * 2;
  }
   printf("%d", s);
}

11.最大公约数:利用递归算法求两个数的最大公约数。

代码语言:javascript
复制
#include <stdio.h>

/* 最大公约数 */
int gcd(int a, int b) {
   int t;
   if (a < b) {
       t = a;
       a = b;
       b = t;
  }
   if (b == 0) {
       return a;
  }
   return gcd(b, a % b);
}

void main() {
   int a, b;
   scanf("%d%d", &a, &b);
   printf("gcd=%d", gcd(a, b));
}

12.逆序输出:输入一个正整数,将该正整数逆序输出。

代码语言:javascript
复制
#include <stdio.h>

void printDigit(int n) {
   printf("%d", n % 10);
   if (n > 10) {
       printDigit(n / 10);
  }
}

void main() {
   int n;
   scanf("%d", &n);
   printDigit(n);
}

13.逆序输出:输入一个字符串,将该字符串逆序输出。

代码语言:javascript
复制
#include <stdio.h>

void printStr(char *str) {
   if (*str != '\0')
       printStr(str + 1);
   if (*str != '\0')
       printf("%c", *str);
}

void main() {
   char str[100];
   gets(str);
   printStr(str);
}
代码语言:javascript
复制
版权申明:内容来源网络,版权归原创者所有。除非无法确认,都会标明作者及出处,如有侵权,烦请告知,我们会立即删除并致歉!‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档