递归循环如何工作?

时间:2018-01-29 07:23:27

标签: java recursion

我现在正在学习递归,我觉得我非常理解递归是如何工作的,然后我看到了这段代码,我的脑袋即将爆炸。

我知道这个简单的递归就像

一样
public void recursivePrint(int number){
    if(number == 0{
        return;
    }
    System.out.println(number + " ");
    recursivePrint(number - 1);
    }

如果参数“number”的值为2。

public void recursivePrint(2){
if(number == 0{
    return;
}
System.out.print(2 + " ");
recursivePrint(2 - 1);
}

public void recursivePrint(1){
if(number == 0{
    return;
}
System.out.print(1 + " ");
recursivePrint(1 - 1);
}

然后停止,因为它符合基本情况。

这打印字符串函数的所有排列怎么样?

private void permute(String str, int l, int r)
{
    if (l == r)
        System.out.println(str);
    else
    {
        for (int i = l; i <= r; i++)
        {
            str = swap(str,l,i);
            permute(str, l+1, r);
            str = swap(str,l,i);
        }
    }
}

for循环中有一个递归调用。如果输入值为“ab”,则此递归函数如何工作?你能解释一下我上面写的吗? 我有这个代码形式geeksforgeeks,并有一个视频,但我无法理解这一点,因为我不知道循环如何循环。

2 个答案:

答案 0 :(得分:1)

当方法调用自身时发生递归。这种方法称为递归方法。递归方法可能比等效的非递归方法更简洁。但是,对于深度递归,有时迭代解决方案可以消耗较少的线程有限堆栈空间。

什么是递归: 通常,递归是函数直接或间接调用自身的时间。例如:

{{1}}

将递归应用于问题的条件: 使用递归函数解决特定问题有两个前提条件:

  1. 问题必须有一个基本条件,它将是递归的端点。当一个 递归函数达到基本条件,它不再进行(更深)递归调用。

  2. 每个级别的递归都应该尝试一个较小的问题。因此递归函数将问题分成越来越小的部分。假设问题是有限的,这将确保递归终止。

  3. 在Java中有第三个先决条件:没有必要过于彻底地解决问题;

    以下函数使用递归计算阶乘。注意方法factorial如何在函数内调用自身。每次调用自身时,它会将参数n减少1.当n达到1(基本条件)时,函数将不再递归。

    {{1}}

答案 1 :(得分:1)

使用permute函数生成字符串,其中l char被其后的一个char替换。在其中有for循环的情况下,您将逐个触摸每个跟随字符。

通过多次调用permute,您可以前进直到字符串的end位置,end由{{1}检查}}

if (l == r)

为例
abc

仅供参考,如果您不熟悉递归或编程,那么排列并不容易理解。为了便于理解,请使用笔纸。