2012-02-11 4 views
1

Мне нужно написать функцию, которая выполняет итерацию по алфавиту (а-г), как это:
(здесь является примером для-с)Как рекурсивно перевести алфавит?

a 
b 
c 

aa 
ab 
ac 

ba 
bb 
bc 

ca 
cb 
cc 

aaa 
aab 
aac 

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

любая идея, как это сделать? Наверное, мне нужна рекурсивная функция.

ответ

9

Не нужно рекурсии!

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

ничего себе, это потрясающе, быстро и коротко :) спасибо Гордон и Грексис. – MilMike

+1

Вау прав, я сейчас удалю свой ответ, так как это смущает, lol. – quickshiftin

+0

Это довольно легко, да. Хорошее решение. Я все еще говорю, что вы не должны удалять ответы на все ответы, которые в порядке и работают, возможно, в некоторых случаях они более полезны или они могут предоставить дополнительные методы, которые хороши. :) – axiomer

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) 
+0

спасибо, это отлично работает в python, попытается экспортировать это в php. – MilMike

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.

Смежные вопросы