Мне нужно написать функцию, которая выполняет итерацию через алфавит (az) следующим образом:
(здесь приведен пример для переменного тока)
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)