以下计划的复杂程度如何?

时间:2013-10-09 05:29:08

标签: java recursion

该程序递归打印给定String的所有可能组合 我对for循环中的语句感到困惑,该循环以递归方式调用自身。是隐式n * n,其中n是String的长度

   public static void getStringCombination(String prefix, String str) {
     System.out.println(prefix);
     for (int i = 0; i < str.length(); i++)
     getStringCombination(prefix + str.charAt(i), str.substring(i + 1));
    }  

2 个答案:

答案 0 :(得分:2)

虽然我个人总是在确定这些事情时遇到麻烦但我不得不说这是因素。 第一个提示是,如果我正确记住我的高中数学,你打印的all the possible combination或多或少是因子。 第二个提示是你正在对你进行递归调用的整个字符串进行for循环,所以第一次调用你会做N个递归调用,然后对于下一个递归调用你会做N-1递归电话等。

我必须说,在说完之后,我有点怀疑自己,如果它确实打印了所有可能的组合......我很肯定它不打印组合,后面的字符在前面第一个字符。这可能使我对它的说法不正确,但我不能说我对此很有把握。

修改

在阅读了@Ben S.的回答和测试后,我很确定你的例子是O(2 ^ n),我认为Ben S.的“修复”是O(n!)然而似乎我错了,它实际上更高。 我恐怕无法解释为什么你的例子是2 ^ n,但我自己仍然在思考它。

答案 1 :(得分:0)

它应该接近O(n2),但我们不能说这是精确的,因为这是递归的情况。