【问题标题】:What is better recursive or iterative star pattern?什么是更好的递归或迭代星形模式?
【发布时间】:2020-08-28 00:43:18
【问题描述】:

我需要做一个函数来获取 int 并做一个正方形的星形图案,就像我将 5 插入到它会给我的函数中一样:

*****
*****
*****
*****
*****

我想知道有什么性能更好的递归或迭代解决方案?递归解决方案的成本是多少?

【问题讨论】:

  • 高度依赖于编程语言。
  • 在大多数语言中,迭代实现可能更快,因为它避免了递归调用的开销。但我建议您简单地实现这两个版本并对其进行分析。
  • 它可能不存在(因为大多数编译器无论如何都会优化尾递归),或者可以忽略不计,因为 IO(打印星号线)将比您花费的时间要多得多将通过更改迭代/递归来查看。
  • 在 Java 中 @MrSmith42

标签: algorithm performance recursion runtime


【解决方案1】:

您的迭代函数比递归函数更有效

递归函数多次调用自身,直到错误条件不匹配递归调用。 让我们以下面的例子来了解更多 我们必须找到 n=7 的阶乘 n=7;

int recfactorial(int n)
{
    if(n > 1)
        return n * recfactorial(n - 1);
    else
        return 1;
}

对于上述函数 n 递归调用,因此将使用 n 堆栈。每次调用一个,因此它将使用 O(N) 辅助空间。

至于迭代函数的地方

 for(i=1;i<=N;i++){    
      fact=fact*i;    
  }

您有 N 个循环,因此您的时间复杂度将为 O(N) 。您将在不需要额外空间的情况下完成整个工作,因此您的程序辅助空间是恒定的,即 O(1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-07
    • 2015-03-14
    • 1970-01-01
    • 2020-10-31
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    相关资源
    最近更新 更多