“归纳式”和“递归式”的含义是否非常相似?
例如,如果存在一种算法,该算法可以根据已确定的前k个成分确定其前k个+1个成分,并通过第一个成分进行初始化,从而确定n维矢量,那么您将其称为递归还是归纳工作?我一直在“递归地”使用,但是今天有人“归纳地”使用它。
“归纳式”和“递归式”的含义是否非常相似?
例如,如果存在一种算法,该算法可以根据已确定的前k个成分确定其前k个+1个成分,并通过第一个成分进行初始化,从而确定n维矢量,那么您将其称为递归还是归纳工作?我一直在“递归地”使用,但是今天有人“归纳地”使用它。
Answers:
不,但不是出于其他人给出的原因。递归与归纳之间的区别不在于递归是“自上而下”而归纳是“自下而上”。归纳与所谓的“原始递归”同构,但总的来说,递归比归纳严格得多。
自上而下与自下而上的区别是微不足道的-任何“自上而下”的原始递归程序都可以机械地转换为“自下而上”的东西。实际上,任何归纳证明都可以转化为递归程序。在归纳结构演算的框架中,如果您想证明每个自然数都是无色的,则可以将其写为一个函数,该函数通过递归调用构造一个证明n为无色的证明,从而证明n是无色的。 1是无足轻重的。
归纳的关键因素是,事物是根据较小的事物来定义的,并且它们经过有限的多个步骤后才能“自下而上”。自然数是归纳的,因为每个自然数要么是0,要么是较小自然数的后继。列表是归纳的,因为每个列表要么为空,要么可以分解(“展开”)为一个元素和一个较小的列表。
有时,递归程序并不是用较小的东西编写的。例如,使用以下Collatz功能:
fun collatz(n)
if n <= 1
return 0;
else if n % 2 == 0
return 1 + collatz(n / 2)
else
return 1 + collatz(3 * n + 1)
end
该函数既无自顶向下也不自底向上,因此不会对自然数产生归纳。
可能会有一个命令来归纳地对待它,但是对于大多数事情来说,根本没有办法。无限流上的函数就是一个很好的例子。实际上,流是“共归”类型的典型示例。
鲍勃·哈珀(Bob Harper)的“编程语言实用基础”可以免费在线获得,它很好地介绍了归纳,共归和递归类型。
不,他们不一样。而且您是对的(我假设您正在描述的算法):它是递归的。
原因是两个单词的定义,您可以在字典或Wikipedia中阅读它们。
归纳法(假设为“数学归纳法”)专门用于证明一个论点的所有情况都是正确的。
递归专门涉及一个过程,该过程可能在同一过程中以某种方式重复。
RE:其他人的答案:
在看到其他人的答案之后,我可以理解为什么会有混淆:在定义数据结构,函数和语言时,一些理论家似乎以一种混淆的方式使用“归纳”和“递归”(请参阅对该问题的评论)。我认为科佩尔(Koppel)的回答(即使目前票数最高)也不能真正反映出这种困惑。既然我们在谈论一种算法,我就不会说有“归纳算法”。我认为这是不必要的分类。