1.求斐波拉契数列
#include <stdio.h>
int f(int n);
int main(){
int number;
scanf("%d",&number);
printf("%d",f(number));
getch();
return 0;
}
int f(int n){
if(n==1 || n==2)
return 1;
return f(n-1)+f(n-2);
}
2.最大公约数
#include <stdio.h>
int f(int n1,int n2);
int main(){
int number1,number2;
scanf("%d %d",&number1,&number2);
printf("%d",f(number1,number2));
getch();
return 0;
}
int f(int n1,int n2){
int k;
if(n1%n2==0)
return n2;
k=n1%n2; n1=n2; n2=k;
return f(n1,n2);
}
3.汉罗塔
#include <stdio.h>
#include <string.h>
void move(char x, char y);
void hannuo(int n,char one ,char two,char three)//One起点,two凭借,three终点
{
if(n==1)move(one, three);
else
{
hannuo(n-1,one ,three,two);
move(one,three);
hannuo(n-1,two,one,three);
}
}
void move(char x,char y)
{
printf("%c--->%c ",x,y);
}
int main()
{
int n;
printf("input your number");
scanf("%d",&n);
hannuo(n,'A','B','C');
return 0;
}
先把n-1个盘子借助目标柱子移动到辅助的柱子,再把第n个盘子移动到目标柱子,此时把辅助柱子作为起点柱子,把开始的起点柱子作为辅助柱子,把n-2个盘子借助目标柱子移动到辅助柱子,再将第n-1个盘子移动到目标柱子以此重复。