【问题标题】:How to use recursive function in place of nested loops?如何使用递归函数代替嵌套循环?
【发布时间】:2020-08-02 21:47:03
【问题描述】:

我想要这样的代码,以便我从用户那里获得两个输入,一个是变量 n,第二个是变量 t,其中 1

int n=in.nextInt();
int t=in.nextInt();
for(int l1=1;l1<=n;l1++)
{
    if(n==1)
    {
        //do something here
    }
    else
    {
        for(int l2=11;l2<=m;l2++)
        {
            if(n==2)
            {
                //do something here
            }
            else
            {
                for(int l3=1;l3<=t;l3++)
                {
                    if(n==3)
                    {
                        //do something here
                    }
                    else
                    {
                        for(int l4=1;l4<=t;l4++)
                        {
                            //do something here
                        }
                    }   
                }
            }
        }
    }
}

但是在这里,如果我希望 n 在 1

【问题讨论】:

  • 所有可以用循环解决的问题都不能用递归解决,你能告诉我你想达到什么目的
  • 他只是在问如何将这个 for 循环转换为递归函数以执行与它相同的输出。
  • @AnkitMishra 但我们不知道这些循环做什么以及输出是什么。 “在这里做某事”在每种情况下是否相同?
  • 是的,“在这里做点什么”在每种情况下都是一样的。
  • 我建议在您的问题中添加您所做的研究,您如何尝试使其递归,以及哪些不起作用 - 这会增加上下文。也许开始更简单,并首先在一个循环中添加递归

标签: java loops recursion


【解决方案1】:

我们可以像我做的那样做一个递归函数。在我的递归函数中,我传递了参数,第一个是 int n,第二个是 int t。 n 表示我们需要多少嵌套循环以及迭代次数,t 表示函数运行的迭代次数。

    public static void recursive(int n,int t)
    {
        for(int i=1;i<=n;i++)
        {
            if(n==t)
                //do something here
            else
                recursive(n,t+1);
        }
    }

这对我来说非常有效。

【讨论】:

    【解决方案2】:

    应该这样做:

    interface Op { public void apply(); }
    
    void f(int start, int end, int crucialStep, Op doSomething) {
        for (int i = start; i <= end; i++) {
            if (i == crucialStep) { doSomething.apply(); }
            else { f(1, 10, crucialStep + 1, doSomething); }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-25
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多