如何递归迭代字母表?

时间:2012-02-11 09:46:33

标签: php algorithm iteration

我需要编写一个迭代字母(a-z)的函数,如下所示:
(这是a-c的一个例子)

a
b
c

aa
ab
ac

ba
bb
bc

ca
cb
cc

aaa
aab
aac

... and so on. (until the word has 5 characters)

任何想法如何做到这一点?我想我需要一些递归函数。

3 个答案:

答案 0 :(得分:9)

无需递归!

for($char = 'a'; $char != 'aaaaaa'; $char++){
    echo $char . PHP_EOL;
}

答案 1 :(得分:1)

这是一种快速递归的方式:

function loopchars($maxlvl,$lvlnow,$cstr){
$chars = array(); //put the chaaracters in here
for($i=0;$i<count($chars);$i++){
$uj=$cstr.$chars[$i];
if($lvlnow==$maxlvl){echo $uj.'<br />';}
else{loopchars($maxlvl,$lvlnow+1,$uj);}
}
}
for($i=1;$i<6;$i++){
loopchars($i,1,'');
}

解释:如果没有达到写出的最高级别,它会再次调用自己。它会在循环中添加每个字符。 loopchars($n,1,'');进行$ n级迭代,因此循环使得每个级别在1到5之间。

答案 2 :(得分:0)

为什么你需要递归呢?它可能是尾递归(这意味着它可以只是在它上面完成)。例如,这是Python中的一个尝试。您已经标记了PHP,因此如果PHP具有类似的库,您可以尝试使用它或在代码中实现相应的函数。

import itertools

mystr = "abcde"

for i in range(1,len(mystr)):
    for each in itertools.combinations_with_replacement(mystr,i):
        print "".join(each)