首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将for循环更改为递归函数

将for循环更改为递归函数
EN

Stack Overflow用户
提问于 2016-03-23 04:05:27
回答 2查看 104关注 0票数 0

因此,我读到可以将任何循环转换为递归函数,我想知道如何将下面的代码(打印字符串的排列)转换为一个(用递归函数替换for循环)。我要求的不是解决方案,而是一种处理这样一项任务的思维方式。谢谢!

代码语言:javascript
复制
private static void permutation(String prefix, String str) {

 int n = str.length();

  if (n == 0) System.out.println(prefix);

  else {

    for (int i = 0; i < n; i++)
       permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
  }
}

谢谢大家!

EN

回答 2

Stack Overflow用户

发布于 2016-03-23 04:40:17

如果你不想改变合同,你可以通过做一个帮手来做。

代码语言:javascript
复制
private static void permutationFor(int i, int n, String prefix, String str) {
    if( i < n ) {
        permutation(prefix + str.charAt(i), 
                    str.substring(0, i) + str.substring(i+1, n));
        permutationFor(i+1, n, prefix, str);
    }
}

因此,您可以通过调用permututaionFor来更改for循环

代码语言:javascript
复制
private static void permutation(String prefix, String str) {
    int n = str.length();
    if (n == 0) {
        System.out.println(prefix);
    } else {
        premutationFor(0, n, prefix, str);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-03-23 04:35:52

添加参数来表示下界和上界,

代码语言:javascript
复制
private static void permutation(String prefix, String str, int i, int j) {

在排列的开始处添加边界条件,

代码语言:javascript
复制
if(i < j){

然后省略for循环,并在已经递归的置换调用中,

代码语言:javascript
复制
permutation(..., i+1, j);

最后,当您最初从其他代码调用它时,传递0和参数str的.length()作为i和j的值。

您还可以创建另一个排列(...)重载,它接受两个额外的参数,这样你的初始调用就不必弄清楚它们。

请注意,您可以在代码中删除n周围的一些冗余,但您可以在不这样做的情况下使其正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36164129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档