这段代码可以称为递归吗?如果没有,下面给出的代码或递归哪个更有利?

阿达什·毛里亚
  1. 我很难找到递归的工作原理。一些教科书说“递归是指一个函数一次又一次地调用自己,直到满足某些基本条件”。

  2. 有些书说“递归是指一个函数一次又一次地调用另一个函数,直到满足某些基本条件”。

  3. 哪个是真的?如果两者都是真的,我们可以将下面给出的示例视为递归吗?如果不是,那么在性能方面哪个更好,

    下面的代码或递归?


    def Function1()
    {
        /* do something */
    }

    def Function2()
    {
        for(i=0; i<=10; i++)
        {
             call Function1()
        }
    }
拉约斯·阿帕德

当事物根据其自身或其类型进行定义时,就会发生递归。递归用于从语言学到逻辑学的各种学科。递归最常见的应用是在数学和计算机科学中,其中定义的函数应用在其自己的定义中。虽然这显然定义了无限数量的实例(函数值),但它通常以不会出现循环或无限引用链的方式完成。

来源

所以,如果你有一个fooand为了计算或执行foo,你需要foo至少再递归一次,那么你就有了递归。例子:

啊!= 1 * 2 * 3 * ... * n

这是一个迭代定义:

int fact(n) {
    int ret = 1;
    int i = 1;
    while (++i < n) ret *= i;
    return ret;
}

这是一个递归定义:

int fact(n) {
    return (n == 1) ? 1 : (n * fact(n - 1));
}

由于您的代码Function2使用 的多次使用进行计算Function1,因此它不是递归的,因为您不需要调用Function2来评估Function2,也不需要调用Function1来评估Function1. 当某些东西是它自己的依赖项时,就会发生递归,而您的代码有一个依赖于另一个函数的函数。您关于性能的问题几乎无法回答,因为有无数种方法可以使用递归或不使用递归来实现事物,当您将递归方法与非递归方法进行比较时,您需要有具体的实现,或者至少非常如何实施这两个案例的严格想法。但是,一般而言,首选非递归方法是个好主意,因为递归方法通常会在内存的堆栈部分出现问题,包括堆栈溢出或无限函数调用以及由于错误导致的崩溃。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以知道为什么这段代码没有给出任何输出吗?

来自分类Dev

这段代码是尾递归的吗?

来自分类Dev

Javascript Curry函数对此代码有利吗?

来自分类Dev

知道如何使这段代码更有效吗?

来自分类Dev

哪个是更有效的递归或循环?

来自分类Dev

为什么这段代码没有给出期望的输出?

来自分类Dev

为什么这段代码没有给出正确的输出?

来自分类Dev

为什么这段代码没有给出预期的输出?

来自分类Dev

有没有更有效的方法来编写这段代码?

来自分类Dev

有什么方法可以使这段代码更短,更有效?

来自分类Dev

有人可以帮我简化这段代码吗?

来自分类Dev

有人可以解释这段代码的作用吗?

来自分类Dev

有人可以向我解释这段代码吗

来自分类Dev

有人可以指出这段代码中的错误吗?

来自分类Dev

有人可以为我解释这段代码吗

来自分类Dev

有什么办法可以压缩这段代码吗?

来自分类Dev

有人可以解释我这段代码吗?

来自分类Dev

有什么办法可以让这段代码更短吗?

来自分类Dev

这个python代码可以更有效吗?

来自分类Dev

JAVA:有人可以向我解释此递归代码吗?

来自分类Dev

有人可以解释下面的scala代码吗?

来自分类Dev

下面的链接列表代码给出了有趣的错误,您可以检查一下吗?

来自分类Dev

try catch块中没有尾部递归代码?

来自分类Dev

如何编写没有递归的Max Heap代码

来自分类Dev

如何编写没有递归的Max Heap代码

来自分类Dev

下面给出的代码是错误的吗?

来自分类Dev

没有递归给出内存错误

来自分类Dev

下面这段代码在python中声明有什么区别

来自分类Dev

这段代码有Python函数吗?

Related 相关文章

热门标签

归档