这是汉诺塔吧。
站在用户的角度思考问题,与客户深入沟通,找到雅安网站设计与雅安网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广、主机域名、网络空间、企业邮箱。业务覆盖雅安地区。
原理:(总共n个盘子)
1、将第一个位置(起始位置)上的n-1个盘子移到第二个位置上,此时第一个位置只剩第n个盘子
2、将第一个位置上的最后一个盘子(第n个盘子)移到第三个位置(目标位置)上,再将第二个位置上的n-1个盘子移到第三个位置上。
你不需要晓得n-1个盘子如何从一个位置移到另一个位置,让程序做。n--n-1--n-2......1,问题不断的小化,当n=1时,直接从第一个位置移到第三个位置,再倒过来推1--2--3......--n。最终问题就会被解决。
hanoi()函数就是将问题小化,使n--1
move()函数中char x是起始位置,char y是目标位置,即x--y.用A、B、C来显示盘子是如何移动的
这个是递归函数:
recursion(int x,int y)
{
if(y-1 == x)return x;
else return x+recursion(x+1);
}
使用的时候用另个函数调用。
int dec(int a[],int n)
{
if(n=1) return ____1_____;
if(a[0]a[1]) return 0;
return _____dec( a,n-1) ( a[n-1] = a[n-2] )______;
}
#include
#include
/*求n的
阶乘
,递归,
分母
部分
*
结束条件为:1的阶乘=1
*
递归时,一定要有结束条件
*/
int
factorial
(n)
{
if(n==1)
//递归结束条件,1的阶乘为1
return
1;
else
return
n*factorial(n-1);
//n的阶乘为n乘以(n-1)!
}
int
main()
{
int
n,x;
size_t
i;
//i为
无符号整数
double
re=0;
printf("input
n
and
x:");
scanf("%d%d",n,x);
//输入n和x的值
for(i=1;i=2*n-1;i+=2)
{
/*pow函数求的是x的i次方,分母为
i的
阶乘。本部分可以优化,因为i的阶乘算出来了,所以i+2的阶乘就是i的阶乘*(i+1)*(i+2),不用重复来计算阶乘。自己可以试试*/
re
+=
pow(x,i)/factorial(i);
}
printf("\nn=%d\tx=%d\tresult=%f\n",n,x,re);//打印出
最后的结果
return
0;
}