我需要写一个函数,它遍历字母表(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)
知道怎么做吗?我想我需要一些递归函数。
不需要递归!
for($char = 'a'; $char != 'aaaaaa'; $char++){
echo $char . PHP_EOL;
}
这是一种快速递归的方法:
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之间。
为什么需要递归?它可以是尾部递归的(这意味着它可以迭代完成)。例如,下面是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)