目录
1.汉诺塔
如果数量大于一,可以分为三个步骤。
以8为例:
第一步是把1-7运到B柱。(c1-> A,c2-->B,c3--->C)注意目的地
第二步把8放到c柱。
第三步把1-7移动到c柱。
void hanoi(int n, char c1, char c2, char c3)
{
if (n > 1)
hanoi(n - 1, c1, c3, c2);
printf("move: %d %c--->%c\n",n,c1,c3);
if (n > 1)
hanoi(n - 1, c2, c1, c3);
}
int main()
{
int n = 0;
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
2.走台阶
问题描述:假设有n个台阶,每跨一步只能上1阶或者2阶台阶。求总共有多少种走法
设n阶台阶有f(n)种走法,那么最后一步只能是1阶或者2阶两种情况,f(n) = 1*f(n - 1) +1* f(n - 2)。
int fib(int n)
{
if(n<=2)
return n;
else
return fib(n-1)+fib(n-2);
}
3.字符串逆序
#include<stdio.h>
#include<string.h>
void reverse(char a[])
{
int len=strlen(a);
char* end = a + len - 1;
char tmp = *a;
*a = *end;
if (len > 3)
{
*end = 0;
reverse(a + 1);
}
*end = tmp;
}
int main()
{
char a[20] = "";
gets(a);
reverse(a);
printf("%s", a);
return 0;
}
共性:
4.递归实现逆序打印等
例:实现函数将十进制转化为六进制(需要取模后逆序打印)
1.数组存储再逆序打印
2.递归
#include<stdio.h>
void six(int n)
{
if(n>=6)
{
six(n/6);
}
printf("%d",n%6);
}
int main()
{
int n=0;
scanf("%d",&n);
six(n);
return 0;
}
共性: