1、求一个正整数的阶乘。
#include <stdio.h>
int factorial(int n);
int factorial(int n){
if(n == 0){
return 1;
} else {
return n * factorial(n - 1);
}
}
int main(void){
int i;
int result;
printf("请输入一个正整数:");
scanf("%d", &i);
result = factorial(i);
printf("%d的阶乘是:%d\n", i, result);
return 0;
}
运行结果:
2、输出斐波拉契数列的前n项。
#include <stdio.h>
int fibonacci(int n);
int fibonacci(int n){
if(n <= 2){
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
int main(void){
int i;
int n;
int result;
printf("请输入一个正整数n:");
scanf("%d", &n);
printf("前%d项的斐波拉契数列如下:\n", n);
for(i = 1; i <= n; i++){
printf("%d ", fibonacci(i));
}
return 0;
}
运行结果:
3、字符串逆序。
#include <stdio.h>
#include <string.h>
int reverse(char *str, int len);
int reverse(char *str, int len){
char tmp;
if(len > 0){
reverse(str + 1, len - 2);
tmp = str[0];
str[0] = str[len - 1];
str[len - 1] = tmp;
}
}
int main(void){
char string[80];
printf("请输入字符串:");
gets(string);
reverse(string, strlen(string));
puts(string);
return 0;
}
运行结果:
4、汉诺塔问题。
三根柱子分别为起始柱A、辅助柱B及目标柱C。相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。(摘自百度百科)。
分析:
对于n层盘子汉诺塔的移动,先将n-1层盘子移动到辅助柱子;再将第n层盘子移动到目标柱子,然后,再把辅助柱子上的n-1层盘子移动到目标柱子。而n-1层盘子的移动,实际上又是一个汉诺塔问题,于是,出现递归。
1、将n-1个盘子从源柱子,通过目标柱子,移动到辅助柱子;
2、将n号盘子从源柱子,移动到目标柱子;
3、将n-1个盘子从辅助柱子,通过源柱子,移动到目标柱子;
#include <stdio.h>
void hanoi(int n, char s, char a, char t);
//s表示源柱子;a表示辅助柱子;t表示目标柱子
void hanoi(int n, char s, char a, char t) {
if(n > 0) {
//1、将n-1个盘子从源柱子,通过目标柱子,移动到辅助柱子;
hanoi(n-1, s, t, a);
//2、将n号盘子从源柱子,移动到目标柱子;
printf("将%d号盘子,从%c柱子移动到%c柱子.\n", n, s, t);
//3、将n-1个盘子从辅助柱子,通过源柱子,移动到目标柱子;
hanoi(n-1, a, s, t);
}
}
int main()
{
hanoi(4, 'A', 'B', 'C');
return 0;
}
运行结果: