8.求年龄:有 5 个人坐在一起,问第 5 个人多少岁,他说比第 4 个人大 2 岁。问
第 4 个人多少岁,他说比第 3 个人大 2 岁。问第 3 个人多少岁,他说比第 2 个
人大 2 岁。问第 2 个人多少岁,他说比第 1 个人大 2 岁。最后问第 1 个人,他
说是 10 岁。请问第 5 个人多大?
include <stdio.h>
int age(int n) {
if (n == 1) return 10;
return age(n - 1) + 2;
}
void main() {
printf("%d", age(5));
}
9.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃
了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都
吃了前一天剩下的一半多一个。到第十天早上想再吃时,见只剩下一个桃子了。
问最初有多少个桃子。
递归:
include <stdio.h>
int peach(int n) {
if (n == 10) return 1;
return (peach(n + 1) + 1) * 2;
}
void main() {
printf("%d", peach(1));
}
循环:
include <stdio.h>
void main() {
int i, s = 1;
for (i = 9; i >= 1; i--) {
s = (s + 1) * 2;
}
printf("%d", s);
}
10.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多
吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上
都吃了前一天剩下的一半多一个。第十天同样是吃了前一天的一半加一个,最后
剩下一个桃子。问最初有多少个桃子。
递归:
include <stdio.h>
int peach(int n) {
if (n == 11) return 1;
return (peach(n + 1) + 1) * 2;
}
void main() {
printf("%d", peach(1));
}
循环:
include <stdio.h>
void main() {
int i, s = 1;
for (i = 10; i >= 1; i--) {
s = (s + 1) * 2;
}
printf("%d", s);
}
11.最大公约数:利用递归算法求两个数的最大公约数。
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.逆序输出:输入一个正整数,将该正整数逆序输出。
#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.逆序输出:输入一个字符串,将该字符串逆序输出。
#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);