【问题标题】:How to recursively Iterate an alphabet?如何递归迭代字母表?
【发布时间】:2012-03-03 14:21:57
【问题描述】:

我需要编写一个像这样遍历字母 (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)

知道怎么做吗?我想我需要一些递归函数。

【问题讨论】:

    标签: php algorithm iteration


    【解决方案1】:

    不需要递归!

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

    【讨论】:

    • 哇,这太棒了,又快又短 :) 谢谢 Gordon 和 Grexis。
    • 哇是对的,我现在要删除我的答案,因为这很尴尬,哈哈。
    • 这非常简单,是的。很好的解决方案。我仍然说你不应该删除那些正常且有效的答案,也许在某些情况下它们更有用,或者它们可以提供额外的方法,这很好。 :)
    • 没关系。我曾经有一个像 axiomer 的答案,然后有人发布了这个,我觉得自己像个白痴。 php如何处理不同的数据类型很有趣。
    • 最好使用 != 而不是
    【解决方案2】:

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

    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 之间。

    【讨论】:

      【解决方案3】:

      为什么需要递归呢?它可能是尾递归的(这意味着它可以迭代地完成)。例如,这里是 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)
      

      【讨论】:

      • 谢谢,这在 python 中效果很好,将尝试将其导出到 php。
      猜你喜欢
      • 2021-02-09
      • 2012-04-12
      • 1970-01-01
      • 2012-10-17
      • 2019-12-10
      • 2021-12-09
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      相关资源
      最近更新 更多