| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2532 人关注过本帖
标题:递归函数
取消只看楼主 加入收藏
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
 问题点数:0 回复次数:13 
递归函数
放寒假继续学习,想做可重复使用元素的全排列结果做不出来,请问怎么使用递归函数算出来。。。我希望达到可以输入排列位数和元素,计算出所有的排列这样的结果,但是现在做出来的东西要根据位数不同自己改代码,这个是我做的,只能算三位时的情况。就是说通过一个递归函数(也可以是别的方法)让电脑自动计算4位5位时的所有排列,谢谢,祝大家新年快乐。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
main()
{
FILE *p;
int a,d,e,g,h,i,j,l=0,m,n,o,x=0;
char b[129];
char c;
p=fopen ("d:\\pailie.dat","w+");
printf("输入排列位数\n");
scanf("%d",&a);//a为位数
c=getchar();//字符c吸收回车符,不然就必须先输入字符串再输入数字
printf("输入组成排列的数字字母和符号,每个符号只输入一次,不以空格分隔(空格是符号)\n");
gets (b);    //b这个字符串为构成排列的数字字母和符号,129是ascii字符集的127(从0到127)加2个
e=strlen (b);//e为构成排列的数字字母和符号的个数
d=pow (e,a);//d为相异元素(数字字母符号)可以重复排列时的需要计算的最大次数(就是元素可以重复排列时的排列数)
for(h=0;h<e;h++)
{   
for(g=0;g<e;g++)
{
for(i=0;i<e;i++)
{        
putchar (b[h]);
fputc (b[h],p);
putchar(b[g]);
fputc (b[g],p);
putchar (b[i]);
fputc (b[i],p);
printf("\n");
fputc ('\n',p);
}
}
}
}












































搜索更多相关主题的帖子: include 元素 
2017-01-13 19:14
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
回复 2楼 吹水佬
谢谢啦,我去找找。

碧蓝航线真好玩
2017-01-14 12:59
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
回复 3楼 九转星河
dalao能给我看一下你那个吗。。。话说我看到别人做的成品会从排列位数只有1位到需要的排列位数的(比如5位)全部列出来啊,dalao你的也是吗?

碧蓝航线真好玩
2017-01-14 13:02
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
回复 2楼 吹水佬
dalao,书上的全排列默认是1个元素只用一次。。。举例我想要的是用1,2排列3位排列
得到8个结果
111
112
121
122
211
212
221
222这样的。。。

碧蓝航线真好玩
2017-01-14 13:05
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
回复 7楼 九转星河
可以更详细点吗dalao,我只是刚入坑的萌新完全不懂。。。

碧蓝航线真好玩
2017-01-14 13:22
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
回复 9楼 九转星河
dalao,我希望有这样的结果,编程完毕以后不需要再改代码的。。。然而我做不出来qaq
图片附件: 游客没有浏览图片的权限,请 登录注册

碧蓝航线真好玩
2017-01-14 14:30
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
1楼我自己的那个现在限制了排位的位数是3,但是可以输入各种不同的符号(<129个不同符号)包括空格,产生的结果是输入元素数的三次方,并且会显示在界面上同时做出.dat记录产生的结果。。。。。。我用递归能控制次数,但是结果不对

碧蓝航线真好玩
2017-01-14 14:50
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
dalao们,我有个思路就是我把一位二位三位四位五位六位七位八位的循环先自己写好,然后根据输入的位数执行。。。用多态代替判断和递归。。。虽然写起来麻烦但是能用。而且有上限。。。。。。不过还是想知道第一页最后一贴的那玩意的做法。

碧蓝航线真好玩
2017-01-14 18:30
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
main()
{
FILE *p;
int a,e,h,g,i,d,f,j,k,l,m,n,o,q,r,s,t;
char b[129];
char c;
p=fopen ("d:\\pailie.dat","w+");
printf("输入排列位数\n");
scanf("%d",&a);//a为排列位数
printf("\n");
c=getchar();//字符c吸收回车符,不然就必须先输入字符串再输入数字
if (a>8||a<1){
printf("只有1到8位的情况");
return 0;}
printf("输入可能组成排列的数字字母和符号,要求不重复输入并且不以空格分隔(空格是符号)\n");
gets (b);//b这个字符串为可能构成排列的数字字母和符号,129是ascii字符集的127(从0到127)加2个
printf("\n");
e=strlen (b);//e为可能构成排列的数字字母和符号的个数
if (a==3)
{
for(h=0;h<e;h++)
{   
for(g=0;g<e;g++)
{
for(i=0;i<e;i++)
{        
putchar (b[h]);
fputc (b[h],p);
putchar(b[g]);
fputc (b[g],p);
putchar (b[i]);
fputc (b[i],p);
printf("\n");
fputc ('\n',p);
}
}
}
}
if (a==2)
{
for(h=0;h<e;h++)
{
for(g=0;g<e;g++)
{
putchar (b[h]);
fputc (b[h],p);
putchar(b[g]);
fputc (b[g],p);
printf("\n");
fputc ('\n',p);
}
}
}
if (a==1)
{
for(h=0;h<e;h++)
{
putchar (b[h]);
fputc (b[h],p);
printf("\n");
fputc ('\n',p);
}
}
if (a==4)
{
for(h=0;h<e;h++)
{   
for(g=0;g<e;g++)
{
for(i=0;i<e;i++)
{
for(d=0;d<e;d++)
{        
putchar (b[h]);
fputc (b[h],p);
putchar(b[g]);
fputc (b[g],p);
putchar (b[i]);
fputc (b[i],p);
putchar (b[d]);
fputc (b[d],p);
printf("\n");
fputc ('\n',p);
}
}
}
}
}
if (a==5)
{
for(h=0;h<e;h++)
{   
for(g=0;g<e;g++)
{
for(i=0;i<e;i++)
{
for(d=0;d<e;d++)
{
for(f=0;f<e;f++)
{
putchar (b[h]);
fputc (b[h],p);
putchar(b[g]);
fputc (b[g],p);
putchar (b[i]);
fputc (b[i],p);
putchar (b[d]);
fputc (b[d],p);
putchar (b[f]);
fputc (b[f],p);
printf("\n");
fputc ('\n',p);
}
}
}
}
}
}
if (a==6)
{
for(h=0;h<e;h++)
{   
for(g=0;g<e;g++)
{
for(i=0;i<e;i++)
{
for(d=0;d<e;d++)
{
for(f=0;f<e;f++)
{
for(j=0;j<e;j++)
{
putchar (b[h]);
fputc (b[h],p);
putchar(b[g]);
fputc (b[g],p);
putchar (b[i]);
fputc (b[i],p);
putchar (b[d]);
fputc (b[d],p);
putchar (b[f]);
fputc (b[f],p);
putchar (b[j]);
fputc (b[j],p);
printf("\n");
fputc ('\n',p);
}
}
}
}
}
}
}
if (a==7)
{
for(h=0;h<e;h++)
{   
for(g=0;g<e;g++)
{
for(i=0;i<e;i++)
{
for(d=0;d<e;d++)
{
for(f=0;f<e;f++)
{
for(j=0;j<e;j++)
{
for(k=0;k<e;k++)
{
putchar (b[h]);
fputc (b[h],p);
putchar(b[g]);
fputc (b[g],p);
putchar (b[i]);
fputc (b[i],p);
putchar (b[d]);
fputc (b[d],p);
putchar (b[f]);
fputc (b[f],p);
putchar (b[j]);
fputc (b[j],p);
putchar (b[k]);
fputc (b[k],p);
printf("\n");
fputc ('\n',p);
}
}
}
}
}
}
}
}
if (a==8)
{
for(h=0;h<e;h++)
{   
for(g=0;g<e;g++)
{
for(i=0;i<e;i++)
{
for(d=0;d<e;d++)
{
for(f=0;f<e;f++)
{
for(j=0;j<e;j++)
{
for(k=0;k<e;k++)
{
for(l=0;l<e;l++)
{
putchar (b[h]);
fputc (b[h],p);
putchar(b[g]);
fputc (b[g],p);
putchar (b[i]);
fputc (b[i],p);
putchar (b[d]);
fputc (b[d],p);
putchar (b[f]);
fputc (b[f],p);
putchar (b[j]);
fputc (b[j],p);
putchar (b[k]);
fputc (b[k],p);
putchar (b[l]);
fputc (b[l],p);
printf("\n");
fputc ('\n',p);
}
}
}
}
}
}
}
}
}








}
结果做成这样了。。。虽然可以用但是感觉不好呀。。。。。。有种输掉什么的感觉

碧蓝航线真好玩
2017-01-14 19:13
y529879803
Rank: 1
等 级:等待验证会员
帖 子:65
专家分:7
注 册:2016-11-10
收藏
得分:0 
回复 18楼 九转星河
排列元素b就是字符型。。。你指a吗?a换成字符?

碧蓝航线真好玩
2017-01-14 19:55
快速回复:递归函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014147 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved