| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 552 人关注过本帖
标题:求教.关于一个程序问题
取消只看楼主 加入收藏
noodle
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2005-7-1
收藏
 问题点数:0 回复次数:2 
求教.关于一个程序问题

我写的一个用递归方法实现输出全排列的小程序: #include<stdio.h> #include<stdlib.h> #define N 20

int nminus(int a[N+1][N+1],int b[N+1],int n,int num) { int i,j; if(n==num) { printf("n2 is %d.\n",n); for(i=1;i<=num;i++) if(a[n][i]!=0) break; b[n]=a[n][i]; for(i=1;i<num+1;i++) printf("--%d ",b[i]); printf("\n"); return 1; } else for(i=1;i<num+1;i++) if(a[n][i]>b[n]) { printf("n1 is %d.\n",n); b[n]=a[n][i]; for(i=n+1;i<num+1;i++) b[i]=0;

for(i=n+1;i<num+1;i++) for(j=1;j<num+1;j++) a[i][j]=j;

for(j=1;j<num+1;j++) if(a[n][j]==0||a[n][j]==b[n]) for(i=n+1;i<num+1;i++) a[i][j]=0; nminus(a,b,n+1,num); return 1; } return 1; }

main()

{ int i,j; int a[N+1][N+1],b[N+1],num; printf("Please input the number:\n"); scanf("%d",&num); //初始化数组;

for(i=0;i<N+1;i++) { a[0][i]=0; b[i]=0; } for(i=1;i<N+1;i++) { a[i][0]=i; for(j=1;j<N+1;j++) a[i][j]=j; } nminus(a,b,1,num); } 其中a[N+1][N+1]用来存储变化信息的数组,main()中,对其进行了赋初值,改函数用nminus()实现递归. 现在我遇到的问题是,该程序只能执行一次,不能回溯,停在nminus中的if(n==num)那一部分.我在nminus()中用for循环,以让它实现递归. 为什么? 热切期望大家赐教1 谢谢!

搜索更多相关主题的帖子: include return 
2005-07-01 17:55
noodle
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2005-7-1
收藏
得分:0 
多谢指教;
这个程序就是用递归的方法实现N!的全排列输出:
  比如要求给出3的全排列输出,则有:--1--2--3    1--3--2   2--1--3   2--3--1   3--1--2  3--2--1
本来想写注释的,但是写起来也没讲清。本程序的问题主要是递归时,只能执行到底,不能回溯,即只能打印--1--2--3;
本来按照设想会回溯打印其他5种情况,但事实上只能执行到这一步。我想不通出了什么问题,所以只好向大侠求救了。

2005-07-02 23:50
noodle
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2005-7-1
收藏
得分:0 
很急啊!大家帮帮忙啊!

2005-07-03 23:14
快速回复:求教.关于一个程序问题
数据加载中...
 
   



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

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