C语言递归问题(全排列)

作者&投稿:聊虽 (若有异议请与网页底部的电邮联系)
~ 可以输出所有的排列,i和n表示排列的起始点和终止点比如说要排列"abcd"起点就是0,终点是3,perm(“abcd”,0,3)就可以了。


数学的“全排列”是什么意思?
以集合A={a, b, c}为例,全排列包括A1={a, b, c}到A6={c, b, a}这6种不同的排列方式。对于N个元素的全排列,总数就是N,这意味着每个元素都有可能占据N个位置中的任意一个。解决全排列问题的方法包括递归和非递归两种。递归方法是从第一个元素开始,依次与后面每个数交换位置;非递归...

Delphi 中用一个数组实现全排列,比如三个数的全排列,我想要的效果是 12...
全排列递归算法:constn=3;typest=string[n];varb:array[1..n] of boolean;i:integer;procedure next(i:integer;s:st);varp:integer;t:string[1];beginif i>n then writeln(s)else for p:=1 to n do if not b[p] then beginstr(p:1,t);b[p]:=true;next(i+1,s+t);b[p]...

求free Pascal 程序设计的一道题,关于全排列
用相同方法找出这些结点的第2个元素的可能值,如此反复进行,一旦出现新结点的3个数据全非零,那就找到了一种全排列方案。当尝试了所有可能方案,即获得了问题的解答。 2)递归算法 如果用P表示n个元素的排列,而Pi表示不包含元素i的排列,(i)Pi表示在排列Pi前加上前缀i的排列,那么,n个元素的排列可递归定义为: ...

数学的“全排列”是什么意思?
全排列是从从N个元素中取出M个元素,并按照一定的规则将取出元素排序,我们称之为从N个元素中取M个元素的一个排列,当M=N时,即从N个元素中取出N个元素的排列。显然,选取的规则不同,排序的结果也不同,则可以得到不同的排列。以最常见的全排列为例,用 S(A)表示集合 A 的元素个数。用 1...

数学的“全排列”是什么意思?
以集合A={a, b, c}为例,它的全排列包括A1={a, b, c}, A2={a, c, b}, A3={b, a, c}, A4={b, c, a}, A5={c, a, b}, A6={c, b, a}。N个元素的全排列总数是N的阶乘,表明了排列的多样性。全排列问题可以通过递归或非递归的方法解决。递归方法是通过一个数与它后面...

c语言函数递归(实现原理与应用场景)
在编程语言中,递归是指一个函数调用自身的过程。递归函数通常会包含一个或多个基本情况,这些情况不需要再次调用函数本身,以避免无限循环。递归函数的实现原理是将问题分解成更小的子问题,直到问题变得足够简单,可以直接解决。递归的实现原理 递归函数的实现原理可以通过以下步骤来理解:1.函数调用自身,...

如何用C实现N阶排列?
用递归的算法,有点像汉诺塔的递归程序,就是先控制一个不动,让剩余的排列好,然后再移动第一个,再排列好剩余的 这个程序也是这个意思 举个例子说 1234 1。先保持1不动,排列234 2。保持2不动,排列34 3。保持3不动,排列4 4。得到4;输出1234。5。然后跳转到3,将3与4互换,6。得到3;...

谁能解释一下用递归做的排列算法的详细步骤?参考王晓东的《计算机算 ...
用到递归的排序算法有快速排序和归并排序。快速排序:先选最开始的元素为枢轴,然后分别从两头中的一头开始与枢轴比较。后面的应该大于枢轴,前面的应该小于枢轴,不然则交换(前面与后面),最后确定下来的位置(前后重合)就是枢轴的位置。这样一来原序列就一分为二。不断递归,再一分为二,最后直到被...

10道pascal的递归习题,简单一点啊
1. 有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2个人大2岁。问第2个人,说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人多大。显然,这是一个递归问题。要求第5个人的年龄,就必须先知道第4个人的年龄...

c语言全排列
int stack[1000];\/\/递归用的栈,并记录当前生成的排列 void Find(int depth)\/\/递归式回溯法生成全排列 { if (depth==m){ int i;for (i=0;i<depth;i++) putchar(map[stack[i]]);putchar('\\n');} else { int i;for (i=0;i<n;i++)if (count[i]){ stack[depth]=i;count...

简阳市19478688314: C语言递归问题(全排列) -
主往杰奇: 可以输出所有的排列,i和n表示排列的起始点和终止点比如说要排列"abcd"起点就是0,终点是3,perm(“abcd”,0,3)就可以了.

简阳市19478688314: acm题 用c语言设计一个递归算法求全排列 -
主往杰奇: //1.cpp生成1~n的全排列 #include<stdio.h> void Arrange(int cur,int n,int* arr) {if(cur==n+1){for(int i=1;i<cur;i++)printf("%d ",arr[i]);printf("\n");return ;}for(int i=1;i<=n;i++){int ok=1;for(int j=1;j<cur;j++)if(arr[j]==i)ok=0;if(ok){arr[cur]=...

简阳市19478688314: 递归全排列 c语言 看不懂 -
主往杰奇: perm(list,i,j)是一个全排列函数,拿你上面的列子来说:perm(list,0,5)意思是数组list的前6个数(第0个数到第5个数)的所有排列,它细分的话就等于:第0个数和第1个数互换以后的perm(list,1,5) 第0数和第2数互换perm(list,1,5) ....第0数和第5数互换...

简阳市19478688314: 如何用C语言递归法解决N的全排列问题 -
主往杰奇: 这个问题不难 你要有这个思想 假如有N个数 递归的来考虑这个问题其实就是将两个数排序 第一个数就是 N个数中的第一个数 第二个数就是对剩下的 N-1个数进行递归的排序操作 至于具体递归时该做的事情 无外乎一个循环 交换数字 递归 然后再交换回数字 仔细琢磨琢磨 思想就是这样啦

简阳市19478688314: C语言全排列问题 -
主往杰奇: 这其实是一个递归 递归函数 意思是这样的 比如有n个数 1 2....n 把1 从第一个开始 往后 与每个数开始交换 然后 第一个数就算定了 后面的 第2个到第n个当成一个整体 再进行这个函数递归 也就是说 第二个到第n个进行全排列 这样下去 当全排列到最后一组数 即第n个数一个的时候 递归退出条件就出来了 就可以输出全排列的值了 当然 最后别忘记把交换的数还原 再进行下一次交换 递归哦 所以最后一局的交换也是很重要的 听完我的解释 再好好琢磨一下 相信你一定会明白的 要是还是不懂可以继续追问我

简阳市19478688314: 求解C/C++一个字符串的递归全排列的问题 -
主往杰奇: int length( char *lpstring ) {if ( !lpstring || !(*lpstring) )return 0;elsereturn length( ++lpstring ) + 1; }

简阳市19478688314: c语言中全排列问题 -
主往杰奇: //输入一个数输出这个数所有的排列,递归做法#include<stdio.h> int a[100]; int n; void output() { int i; for(i=1;i<=n;i++) printf("%3d",a[i]); printf("\n"); } void Swap(int &a,int &b) //注意取地址 { int t; t=a; a=b; b=t; } void pailie(int t) { int i; if(t==n) //输...

简阳市19478688314: 急!!!如何用C语言编写打出1~n个数的全排. -
主往杰奇: 递归,比较简单,10个数全排如下#include<stdio.h> void swap(int k,int i,int a[]) { int t; t=a[k]; a[k]=a[i]; a[i]=t; } void pailie(int a[],int i,int n) {int k,t; if(i==n) { for(t=0;t<n;t++) printf("%3d",a[t]); printf("\n"); } elsefor(k=i;k<n;k++) { swap(i,k,a); pailie(a...

简阳市19478688314: 求c语言多数排列方案递归的代码 样列输入 3 输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 -
主往杰奇: #include "stdio.h" int d[100]; int dn; // 全排列 总数 void init(int d[],int n) // 填初始数据 {dn=n;for (int i=0;i<n;i++)d[i]=i+1; } void output(int d[]) // 输出 {for (int i=0;i<dn;i++)printf("%d ",d[i]);printf("\n"); } //----交换法递归全排列算法---- ------...

简阳市19478688314: C语言递归问题 m个A n个B全排列 求详细解释! -
主往杰奇: int f(int m,int n) {if(m==0||n==0)return 1; // 这里是1才对啊 return____________;假设m==0或者n==0的时候, 全排列只有1种 当m和n都不是0的时候 第一个位置可以是A, 也可以是B 当第一个位置是A的时候, 后面剩下的排列方式就剩下m-1个A和n个B 当第一个位置是B的时候, 后面剩下的排列方式就剩下m个A和n-1个B 所以总的数目是上面两种情况的和

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网