Algorithm 递归是循环吗
“1.程序将使用重复执行(循环)计算值。”Algorithm 递归是循环吗,algorithm,Algorithm,“1.程序将使用重复执行(循环)计算值。” 递归是重复执行,但是,我不认为它是一个循环,你认为如果我使用递归,它会遵循上面的指导原则吗?否。事实上,它看起来是专门要求递归的“对立面”。否。事实上,它看起来是专门要求递归的“对立面”,循环基本上是关于迭代的,这与递归不同。主要区别在于迭代使用的空间是恒定的,而递归越深入,使用的空间就越多。例如,这里有迭代和递归过程来计算从1到n的数字之和 def sum_iter(n): x = 0 for i in range(1,n+1): x
递归是重复执行,但是,我不认为它是一个循环,你认为如果我使用递归,它会遵循上面的指导原则吗?否。事实上,它看起来是专门要求递归的“对立面”。否。事实上,它看起来是专门要求递归的“对立面”,循环基本上是关于迭代的,这与递归不同。主要区别在于迭代使用的空间是恒定的,而递归越深入,使用的空间就越多。例如,这里有迭代和递归过程来计算从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,我不确定该把它放在哪里。术语“循环”可以抽象地使用(程序执行路径中的一个循环)或具体地使用(引导这样一个循环的语法构造)。这个问题暗示了后一种用法。