Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 递归是循环吗_Algorithm - Fatal编程技术网

Algorithm 递归是循环吗

Algorithm 递归是循环吗,algorithm,Algorithm,“1.程序将使用重复执行(循环)计算值。” 递归是重复执行,但是,我不认为它是一个循环,你认为如果我使用递归,它会遵循上面的指导原则吗?否。事实上,它看起来是专门要求递归的“对立面”。否。事实上,它看起来是专门要求递归的“对立面”,循环基本上是关于迭代的,这与递归不同。主要区别在于迭代使用的空间是恒定的,而递归越深入,使用的空间就越多。例如,这里有迭代和递归过程来计算从1到n的数字之和 def sum_iter(n): x = 0 for i in range(1,n+1): x

“1.程序将使用重复执行(循环)计算值。”


递归是重复执行,但是,我不认为它是一个循环,你认为如果我使用递归,它会遵循上面的指导原则吗?

否。事实上,它看起来是专门要求递归的“对立面”。

否。事实上,它看起来是专门要求递归的“对立面”,循环基本上是关于迭代的,这与递归不同。主要区别在于迭代使用的空间是恒定的,而递归越深入,使用的空间就越多。例如,这里有迭代和递归过程来计算从1到n的数字之和

def sum_iter(n):
  x = 0
  for i in range(1,n+1):
    x += i
  return x

def sum_recursive(n):
  if n == 0:
    return 0
  else:
    return n + sum_recursive(n-1)
如果使用非常大的参数运行这些函数,递归版本的堆栈空间将耗尽(“堆栈溢出”),但迭代版本可以正常工作

有一种特殊的递归称为尾部递归,函数不必对递归调用中的值做任何处理,只需将其传递给调用方。在这种情况下,您不需要跟踪堆栈-您可以直接跳到顶部。这就是所谓的尾部调用优化。用于计算整数1到n之和的尾部递归函数如下所示

def sum_tailrec(n):
  def helper(s,i):
    if i == 0:
      return s
    else:
      return helper(s+i, i-1)
  return helper(0, n)
在这种情况下,人们通常将函数
helper
称为迭代递归,因为(使用尾部调用优化)它只使用恒定的空间量


这一切都有点毫无意义,因为Python没有尾部调用优化,但是。

循环基本上是关于迭代的,这与递归不同。主要区别在于迭代使用的空间是恒定的,而递归越深入,使用的空间就越多。例如,这里有迭代和递归过程来计算从1到n的数字之和

def sum_iter(n):
  x = 0
  for i in range(1,n+1):
    x += i
  return x

def sum_recursive(n):
  if n == 0:
    return 0
  else:
    return n + sum_recursive(n-1)
如果使用非常大的参数运行这些函数,递归版本的堆栈空间将耗尽(“堆栈溢出”),但迭代版本可以正常工作

有一种特殊的递归称为尾部递归,函数不必对递归调用中的值做任何处理,只需将其传递给调用方。在这种情况下,您不需要跟踪堆栈-您可以直接跳到顶部。这就是所谓的尾部调用优化。用于计算整数1到n之和的尾部递归函数如下所示

def sum_tailrec(n):
  def helper(s,i):
    if i == 0:
      return s
    else:
      return helper(s+i, i-1)
  return helper(0, n)
在这种情况下,人们通常将函数
helper
称为迭代递归,因为(使用尾部调用优化)它只使用恒定的空间量


这一切都有点毫无意义,因为Python没有尾部调用优化,但是。

谢谢david,他不确定该放在哪里。术语“循环”可以抽象地使用(程序执行路径中的一个循环),也可以具体地使用(指导这样一个循环的语法构造)。这个问题暗示了后一种用法。谢谢david,我不确定该把它放在哪里。术语“循环”可以抽象地使用(程序执行路径中的一个循环)或具体地使用(引导这样一个循环的语法构造)。这个问题暗示了后一种用法。