Do "inductively" and "recursively" mean very similar?
For example, if there is an algorithm that determines a n-dim vector by determine its first k+1 components based on its first k components having been determined, and is initialized with the first component, would you call it works recursively or inductively? I have been using "recursively", but today someone said it "inductively".
Asked By : Tim
Answered By : James Koppel
No, but not for the reasons other people have given. The difference between recursion and induction is not that recursion is "top-down" and induction is "bottom-up." Induction is isomorphic to something called "primitve recursion," but, in general, recursion is strictly more powerful than induction.
The distinction between top-down and bottom up is trivial -- any "top-down" primitive recursive program can be mechanically converted into something "bottom-up." In fact, any proof by induction can be turned into a recursive program. In the framework of the calculus of inductive constructions, if you want to prove that every natural number is froopulous, you'd write it as a function that constructs a proof that n is froopulous by making a recursive call to construct a proof that n-1 is froopulous.
The key factor of induction is that things are defined in terms of smaller things, and they "bottom out" after finitely many steps. Natural numbers are inductive because every natural is either 0, or the successor of a smaller natural. Lists are inductive because every list is either empty, or can be broken down ("unfolded") into an element and a smaller list.
Sometimes recursive programs aren't written in terms of smaller things though. For example, take this Collatz funtion:
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
This function goes neither top-down nor bottom-up, and is thus not inductive over the natural numbers.
There might be an ordering to treat that inductively, but for most things there's simply no way. Functions over infinite streams are a great example. In fact, streams are the prototypical example of a "coinductive" type.
Bob Harper's "Practical Foundations for Programming Languages," available free online, has a nice introduction to inductive, coinductive, and recursive types.
Best Answer from StackOverflow
Question Source : http://cs.stackexchange.com/questions/6247
0 comments:
Post a Comment
Let us know your responses and feedback