求阶乘:
例如:5!=5*4!=5*4*3!=5*4*3*2!=5*4*3*2*1;
//求一个正整数的阶乘
#include<stdio.h>
int fun(int x){
if(x == 1){
return 1;
}else{
return x*fun(x-1);
}
}
int main(){
int x;
printf("请输入一个数:");
scanf_s("%d",&x);
printf("%d的阶乘是%d",x,fun(x));
return 0;
}
求斐波那契数列中第x个数的值:
斐波那契数列:1,1,2,3,5,8,13,21,34,55........
第一个和第二个数都为1,从第三个数开始其值为前两数之和;
#include<stdio.h>
int feibonaqie(int x){
if(x == 1 || x == 2){
return 1;
}else{
return feibonaqie(x-1)+feibonaqie(x-2);
}
}
int main(){
printf("请输入第x个数的值:");
int x;
scanf_s("%d",&x);
printf("斐波那契数列中第%d个数的值是%d",x,feibonaqie(x));
return 0;
}
汉诺塔游戏:
三根杆子(A,B,C),在A杆由下而上、由大到小顺序放置x个圆盘。游戏的目标:把A杆上的圆盘全部移到C杆上,并保持原来的顺序叠好,要求一次只能挪动一个盘子,并且不能出现大盘在上,小盘在下的情况;(借助B杆实现A杆全部移到C杆且顺序不变)。
如果想不明白,可以想想把大象放冰箱分几步
#include<stdio.h>
void move(char x,char y){
printf("%c---->%c\n",x,y);
}
void hanoi(int m,char one,char two,char three){
if(m == 1){
move(one,three);
}else{
hanoi(m-1,one,three,two);
move(one,three);
hanoi(m-1,two,one,three);
}
}
int main(){
int x;
scanf_s("%d",&x);
hanoi(x,'A','B','C');
return 0;
}