perm函数python,perm函数

Python的一个递归函数,求过程

我觉得你在贴代码的时候应该把缩进加上,或者直接把代码的图片放上,要好理解的多

我们一直强调做网站、成都做网站对于企业的重要性,如果您也觉得重要,那么就需要我们慎重对待,选择一个安全靠谱的网站建设公司,企业网站我们建议是要么不做,要么就做好,让网站能真正成为企业发展过程中的有力推手。专业的建站公司不一定是大公司,创新互联建站作为专业的网络公司选择我们就是放心。

python里如何用递归法列出一个tree里所有的枝干?

您好:perm函数输出的是参数list从参数k位置开始,到参数m位置结束的全排列

def perm(list,k,m):

if k==m:

for i in range(m+1): # 递归的结束条件是k==m,在整个递归过程中参数m(即结束位置没有改变),而参数k则每次递归+1

print list[i], # 输出递归结束时的list状态

print

else:

for i in range(k,m+1): # 该循环用来负责生成递归的下一个状态

list[k],list[i]=list[i],list[k] # 将list的k位置与每一个位置i分别交换

perm(list,k+1,m) # 由于k位置与每一个位置i交换,也即k位置所有可能选值都已被穷举,此时只需要继续计算k+1之后的职位即可,因此以k+1为开始位置,结束位置m不变进入下一层递归

list[k],list[i]=list[i],list[k] # 由于list是引用传递,因此需要在位置交换之后重新交换,以保证list不变。

全排列递归算法

希望我的答复可以帮助你加深理解:

第一,perm函数中的条件for(int

i=k;i=m;i++)应更正为

for(int

i=k;i

#include

int

N,P=0;

void

swap(int

a[],int

i,int

j)

{

int

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

void

perm(int

a[],int

k,int

m,int

pk,int

pm)

{

int

i;

/*k为中间变量,m初始化为参与排列元素的起始坐标和终止坐标

pk,pm分别表示参与排列元素的起始坐标和终止坐标,整个递归过程保持不变*/

if(k==m)

{

printf("-----perm

%d

:\n",P/N+1);/*打印提示*/

for(i=pk;i

Over!\n");/*打印提示*/

system("pause");

return

0;

}

2.打印结果

============================================================

a

0,0,1,2,3

b

0,0,1,2,3

a

1,1,1,2,3

b

1,1,1,2,3

a

2,2,1,2,3

b

2,2,1,2,3

-----perm

1

:

1

2

3

c

2,2,1,2,3

d

2,2,1,2,3

c

1,1,1,2,3

d

1,1,1,2,3

a

2,1,1,2,3

b

2,1,1,3,2

a

2,2,1,3,2

b

2,2,1,3,2

-----perm

2

:

1

3

2

c

2,2,1,3,2

d

2,2,1,3,2

c

2,1,1,3,2

d

2,1,1,2,3

c

0,0,1,2,3

d

0,0,1,2,3

a

1,0,1,2,3

b

1,0,2,1,3

a

1,1,2,1,3

b

1,1,2,1,3

a

2,2,2,1,3

b

2,2,2,1,3

-----perm

3

:

2

1

3

c

2,2,2,1,3

d

2,2,2,1,3

c

1,1,2,1,3

d

1,1,2,1,3

a

2,1,2,1,3

b

2,1,2,3,1

a

2,2,2,3,1

b

2,2,2,3,1

-----perm

4

:

2

3

1

c

2,2,2,3,1

d

2,2,2,3,1

c

2,1,2,3,1

d

2,1,2,1,3

c

1,0,2,1,3

d

1,0,1,2,3

a

2,0,1,2,3

b

2,0,3,2,1

a

1,1,3,2,1

b

1,1,3,2,1

a

2,2,3,2,1

b

2,2,3,2,1

-----perm

5

:

3

2

1

c

2,2,3,2,1

d

2,2,3,2,1

c

1,1,3,2,1

d

1,1,3,2,1

a

2,1,3,2,1

b

2,1,3,1,2

a

2,2,3,1,2

b

2,2,3,1,2

-----perm

6

:

3

1

2

c

2,2,3,1,2

d

2,2,3,1,2

c

2,1,3,1,2

d

2,1,3,2,1

c

2,0,3,2,1

d

2,0,1,2,3

-----Over!

请按任意键继续.

.

.

python递归 例:把10x0中 x转成1和0 输出1010 和1000

我不明白的是,为什么会只能处理10个以下的x。虽然python有1000次的递归次数上限,但你的问题所需要的递归次数是由x的个数决定的,应该还远没有达到递归上限。所以,只能认为你的写法是错误的。

def f(string):

if 'x' in string:

strlist = string.split()

strtmp = ''

for i in range(len(strlist)):

strtmp += strlist[i].replace('x', '0', 1)

strtmp += ' '

strtmp += strlist[i].replace('x', '1', 1)

strtmp += ' '

return f(strtmp.strip())

else:

return string

a = 'xxxxxxxxxxx'

print f(a)

Python实现的排列组合计算操作示例

Python实现的排列组合计算操作示例

本文实例讲述了Python实现的排列组合计算操作。分享给大家供大家参考,具体如下:

1. 调用 scipy 计算排列组合的具体数值

from scipy.special import comb, perm

perm(3, 2)

6.0

comb(3, 2)

3.0

2. 调用 itertools 获取排列组合的全部情况数

from itertools import combinations, permutations

permutations([1, 2, 3], 2)

itertools.permutations at 0x7febfd880fc0

# 可迭代对象

list(permutations([1, 2, 3], 2))

[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

list(combinations([1, 2, 3], 2))

[(1, 2), (1, 3), (2, 3)]

python全排列代码,求解释

def perm(l):

#定义自定义函数 函数名为perm 参数为l 当传入参数时 l等于该参数

if(len(l)=1):  

#if语句如果传入的参数l的长度小于等于1(也就是0)则运行下面代码 否则跳过该if#    #语句

return [l]

#返回列表[l] 此处为递归的终止  

r=[]

#定义列表 并初始化r   

for i in range(len(l)):  

#for循环(c语言常这么说) 迭代 i的变化范围为0 到l(字母L)的长度-1

s=l[:i]+l[i+1:]

# 将l的前三项以及l的第i+1后的字串赋给s

p=perm(s)  

#递归 将s做perm的处理 递归请百度

for x in p:

#迭代p列表  

r.append(l[i:i+1]+x) 

#将l的第i项添加进r列表 

return r

#返回r列表

函数功能:将传入perm()的字串、列表等参数进行全排列 并返回全排列后的列表

#递归不是人的思考方式…


当前标题:perm函数python,perm函数
网站URL:http://pwwzsj.com/article/dsceoji.html