实验8 函数——递归函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

淮海工学院计算机科学系实验报告书

课程名:《C语言程序设计A 》

题目:实验8 函数

——递归函数

班级:软嵌151

学号:**********

*名:***

1、实验内容或题目

(1)用递归编写n!的函数,并在main主函数中调用此函数。

(2)有n个大小不同的盘片从大到小放在A柱上,另有B和C两个空柱,要求将这n个盘片从A柱搬到C柱上,在搬动过程中,每次只能搬一个盘片,而且小的不能放在大的之下。编写hanio函数实现搬迁过程。

(3)编写一个程序,求解皇后问题:在n×n的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线。

2、实验目的与要求

(1)要求熟练掌握函数的定义和调用,熟悉函数返回值的使用。

(2)熟悉函数调用的方式和过程。

(3)重点掌握递归函数的使用。

(4)要求实验的第2题采用递归函数编写,盘片的数目在main主函数中输入。提示:函数的参数定义如hanio(n,A,C,B),表示将n个盘片从A柱通过C柱搬到B柱。

(5)要求实验的第3题采用递归函数编写皇后的个数n由用户输入,其值不能超过20;采用整数数组q[N]求解结果,因为每列只能放一个皇后,q[i]的值表示第i个皇后所在的行号,即该皇后放在(q[i],i)的位置上。求解皇后问题的递归模型如下:place(i,n):若i=n,则n个皇后放置完毕,输出解(输出q数组元素)

place(k,n):在第k列找一个合适位置i,放置一个皇后(即q[k]=i);place(k+1,n);其中,place(k,n)表示前面的第1,…,k-1个皇后放置好后,现在用于放置k,…,n的皇后。

3、实验步骤与源程序

⑴实验步骤

⑵源代码

(1)、

#include

long fac(int n)

{

long f;

if(n==0||n==1)

f=1;

else

f=n*fac(n-1);

return (f);

}

void main()

{

int n;

printf("请输入一个整数n:");

scanf("%d",&n);

printf("%d!=%d\n",n,fac(n));

}

(2)、

#include

int main()

{

void hanio(int n,char A,char C,char B);

int m;

printf("请输入盘片的数量:");

scanf("%d",&m);

printf("移动%d个盘片的步骤如下:\n",m);

hanio(m,'A','B','C');

return 0;

}

void hanio(int n,char one, char two, char three) {

void move(char x,char y);

if(n==1)

move(one,three);

else

{

hanio(n-1,one,three,two);

move(one,three);

hanio(n-1,two,one,three);

}

}

void move(char x,char y)

{

printf("%c-->%c\n",x,y);

}

(3)、

#include

#include

const int N=20;

int q[N];

int cont=1;

void print(int n)

{

int i;

printf("第%2d个解:",cont);

for (i=1;i<=n;i++)

printf("%d ",q[i]);

cont++;

printf("\n");

}

int find(int i,int k)

{

int j;

j=1;

while (j

{

if ((q[j]==i) || (abs(q[j]-i)==abs(j-k)))

return 0;

j++;

}

return 1;

}

void place(int k,int n)

{

if (k>n)

print(n);

else

for (int i=1;i<=n;i++)

if (find(i,k))

{

q[k]=i;place(k+1,n);

}

}

int main()

{

int n;

int result;

printf("皇后问题(n<20)\n");

printf("输入摆放的皇后个数:\n n=");

scanf("%d",&n);

if (n>20)

{

printf("n值太大,不能求解\n");

result=1;

}

else if(n>0&&n<4)

{

printf("不存在皇后问题!");

printf("\n");

result=0;

}

else

{

printf("有%d个皇后问题求解如下:\n",n);

place(1,n);

printf("\n");

result=1;

}

return result;

}

4、测试数据与实验结果(可以抓图粘贴)(1)、

相关文档
最新文档