题目
题目一:利用递归方法求5!
思路
递归函数:一个函数在它的函数体内调用它自身称为队规调用。
f(n)=n*(n-1)(n-2)…321
f(n)=nf(n-1)
转换成C语言
int f(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n * f(n - 1);
}
}
完整编码如下
#include <stdio.h>
int f(int n)
{
if (n == 1)
{
return 1;
}
else
{
return n * f(n - 1);
}
}
int main()
{
int f(int n);
int m = 5;
printf("5!=%d\n", f(m));
return 0;
}
结果
题目二:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印
思路
首先定义输入字符
char c;
c = getchar();
putchar(c);
递归函数如下
void f(int n)
{
char c;
if (n == 1)
{
c = getchar();
f(n - 1);
putchar(c);
}
}
完整编码如下
#include <stdio.h>
void f(int n)
{
char c;
if (n == 1)
{
c = getchar();
putchar(c);
}
else
{
c = getchar();
f(n - 1);
putchar(c);
}
}
int main()
{
void f(int n);
f(5);
return 0;
}
结果
题目三:递归输出一桌淘小子年龄
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
思路
利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
递归函数如下
int age(int n)
{
int c = 0;
if (n == 1)
{
c = 10;
}
else
{
c = age(n - 1) + 2;
}
return c;
}
完整编码
#include <stdio.h>
int age(int n)
{
int c = 0;
if (n == 1)
{
c = 10;
}
else
{
c = age(n - 1) + 2;
}
return c;
}
int main()
{
int age(int n);
printf("age(5)=%d", age(5));
return 0;
}
结果
题目四:给一个不多余3位数的正整数,要求:(1)求它是几位数?(2)逆序打印出各位数字
思路
这个题目简单,就是求每个位置上的数,利用%和/就可以,编码如下
#include <stdio.h>
int main()
{
int number;
int g, s, b;
printf("请输入不多余3位数的正整数:");
scanf("%d", &number);
b = number / 100;
s = number % 100 / 10;
g = number % 100 % 10;
if (b != 0)
{
printf("您所输入的是三位数\n");
}
else if (s != 0)
{
printf("您所输入的是两位数\n");
}
else if(g!=0)
{
printf("您所输入的是个位数\n");
}
printf("%d%d%d\n", g, s, b);
return 0;
}
结果
题目五:判断是不是回文数
一个五位数,判断他是不是回文数。12321是回文数,个位与万位相同,十位与千位相同
思路
这个题和题目四是一样的,就是先求出各位数字,然后判断个位与万位是否相同,十位与千位是否相同,完整编码如下:
#include <stdio.h>
int main()
{
long a, b, c, d, x;
printf("请输入 5 位数字:");
scanf("%ld", &x);
a = x / 10000; //分解出万位
b = x % 10000 / 1000; //分解出千位
c = x % 100 / 10; //分解出十位
d = x % 10; //分解出个位
//判断个位等于万位并且十位等于千位
if (a == d && b == c) {
printf("这是回文数\n");
}
else {
printf("这不是回文数\n");
}
}
结果