📜  具有递归函数的辅助空间

📅  最后修改于: 2021-04-27 23:02:40             🧑  作者: Mango

先决条件:递归
程序使用的内存有时与运行时间一样重要,特别是在诸如移动设备之类的受限环境中。
例如,如果我们需要创建一个大小为n的数组,则将需要O(n)空间。如果我们需要一个大小为nxn的二维数组,它将需要O(n 2 )。
递归调用中的堆栈空间也算作程序所需的额外空间。
例如 :

CPP
int sum(int sum)
{
   if (n <= 0)
       return 0;
   return n + sum(n-1);
}


Java
static int sum(int sum)
{
   if (n <= 0)
       return 0;
   return n + sum(n - 1);
}
 
// This code is contributed by Pratham76


C#
static int sum(int sum)
{
   if (n <= 0)
       return 0;
   return n + sum(n - 1);
}
 
// This code is contributed by rutvik_56


CPP
// A non-recursive code that makes n calls
// but takes O(1) extra space.
int pairSumSequence(int n)
{
    int sum = 0;
    for (int i=0; i


在上面的示例函数,每个调用都会向堆栈添加一个新级别。

Sum(5)
    ->sum(4)
            ->sum(3)
            ->sum(2)
                ->sum(1)
                       ->sum(0)

这些调用中的每一个都添加到调用堆栈中,并占用实际内存。因此,这样的代码将花费O(n)时间和O(n)辅助空间。
但是,仅仅因为您总共有n次调用并不意味着它占用了O(n)空间。考虑以下函数,该函数在0和n之间添加相邻元素:
例子:

CPP

// A non-recursive code that makes n calls
// but takes O(1) extra space.
int pairSumSequence(int n)
{
    int sum = 0;
    for (int i=0; i