当前位置: 首页 > 面试题库 >

递归在这里如何工作?

申屠森
2023-03-14
问题内容

代码1:

public static int fibonacci (int n){ 
    if (n == 0 || n == 1) { 
        return 1; 
    } else { 
        return fibonacci (n-1) + fibonacci (n-2); 
    }        
}

fibonacci如果还没有完成解释,该如何使用?我已经可以理解在其他情况下使用递归

代码2:

class two 
{
    public static void two (int n) 
    {
        if (n>0) 
        {
            System.out.println (n) ;
            two (n-1) ;
        }
        else
        {
            return ;
        }
    }

    public static void main (String[] arg) 
    {
        two (12) ;
    }
}

但是,在代码2的情况下,n最终将达到它无法满足的程度,n>0并且该方法将停止递归调用自身。但是,在代码2的情况下,如果n=1作为起点到2、3和5,依此类推,我看不到如何从1获得自身。另外,我看不到该行的return fibonacci (n-1) + fibonacci (n-2)工作方式,因为fibonacci (n-2)在某种意义上必须包含该行fibonacci (n-1)才能工作,但目前为止还不行。

我正在看的书说它会起作用。它是如何工作的?


问题答案:

好吧,撇开编译器实际上对您的代码所做的事情(这是可怕的,又很漂亮)以及CPU实际上如何解释您的代码(同样),这是一个相当简单的解决方案。

考虑以下文本说明:

要对编号的块进行排序:

  1. 选择一个随机的块。
  2. 如果是唯一的街区,请停止。
  3. 将编号较小的块移到左侧,编号较大的块向右移动。
  4. 排序编号较低的块。
  5. 对编号较高的块进行排序。

当您到达说明4和5时,系统将要求您重新开始整个过程​​。但是,这不是问题,因为您仍然知道如何开始该过程,并且当所有这些最终解决时,您就会得到一堆排序的块。您可以用纸条覆盖这些说明,它们将变得更容易遵循。



 类似资料:
  • 问题内容: 请以最简单的方式说明递归的工作方式。 问题答案: 这是一个递归方法的简单示例:-

  • 我一直在网上看递归(C语言)的例子,试图更好地理解它和它是如何工作的。一般来说,我可以毫无问题地跟踪一些基本的递归问题(比如阶乘问题),但是我发现了这个问题,并且完全不知道如何跟踪它。 这个想法是让用户输入一个变化量,通过使用递归,您打印出可以进行变化量的方式数量。代码如下: 显然,这是递归的常见应用。不过,我无法理解这种递归是如何工作的。对我来说最突出的是,同一条线路上有2个递归调用。我从未见过

  • 我找到了下面的函数,它递归地反转链表: 我理解了涵盖基本情况的语句。 递归是如何反转列表的?有没有更简单的递归版本可以反向链表?作为参考,我正在解决LeetCode问题206。反向链表: 给定单链表的,反向该列表,并返回反向列表。

  • 我几乎理解了尾递归是如何工作的,以及它与普通递归之间的区别。我只是不明白为什么它不要求堆栈记住它的返回地址。 在尾递归函数中调用函数本身后没有什么可做的,但对我来说这没有意义。

  • 此函数生成数组的排列。我已经把笔放在纸上,在开发工具中放置断点,并煞费苦心地逐步完成每个函数调用,但我仍然不明白这是如何工作的。 具体来说,就是 for 循环。一旦 do It 函数拼接了数组中的所有数字,它将临时数组的切片副本推送到答案数组中。然后,它将项拼接到参数数组中,从临时数组中弹出相同的项,并返回 for 循环第一次迭代的答案。因此,在遍历数组一次后,答案 = [1,2,3] 温度 =

  • 我现在正在做一项作业,我已经在网上找到了解决问题的方法(看起来简单得离谱,但就像魔术一样) 我仍然很难理解递归到底是如何工作的,我真的很想学。 有人能帮我理解这个逻辑吗? 问题是找到从根节点到叶节点的最长路径。(基本上找到树的高度?)。 函数如下: 这是我的treeNode类定义: