河内塔问题
#include <stdio.h>
void hanoi(int n, char a, char b, char c)/*起点,终点,中转站*/
{
if(n == 1) printf("%c->%c\n", a, b);
else
{
hanoi(n - 1, a, c, b);
printf("%c->%c\n", a, b);
hanoi(n - 1, c, b, a);
}
}
int main()
{
char a, b, c;
hanoi(9, 'a', 'b', 'c'); /*注意字符用单引号括起*/
return 0;
}
阶乘的定义
#include <stdio.h>
int fact(int n)
{
return n <= 0 ? 1 : n * fact(n - 1);
}
int main()
{
int n;
scanf("%d", &n);
printf("%d", fact(n));
return 0;
}
Fibonacci sequence
(理论上,两者均可。
实际上,算第55项时,循环法无问题,递归法缓慢)
循环法:
#include <stdio.h>
int main()
{
int x = 1;
int i;
int n;
int sb, sa, tem;
int count = 2;
scanf("%d", &n);
printf("%4d%4d", x, x);
sb = sa = x;
for(i = 3; i <= n; i++)
{
printf("%4d", sb + sa);
count++;
if(count % 5 == 0)putchar('\n');
tem = sa;
sa = sb + sa;
sb = tem;
}
return 0;
}
递归法
#include <stdio.h>
int fibo(int n)
{
if(n == 1||n == 2)
return 1;
else if(n > 2)
return fibo(n - 1) + fibo(n - 2);
else
printf("Invalid");
}
int main()
{
int i;
int count = 0;
int x;
scanf("%d", &x);
for(i = 1; i <= x; i++)
{
printf("%4d", fibo(i));
count++;
if(count % 5 == 0) putchar('\n');
}
return 0;
}