0% found this document useful (0 votes)
51 views3 pages

CS109A Notes For Lecture 1/19/96 Recursive Denition of Expressions Basis: Induction

The document discusses recursive definitions of expressions and recursive programming. It provides examples of: 1) Recursively defining expressions with binary operators using a basis of operands being expressions and an induction of combining expressions with operators. 2) Proving by complete induction that expressions with binary operators of length n have one more operand than operators. 3) Using recursion to solve problems by expressing solutions in terms of smaller instances, with a basis and induction step. Converting integers to binary is given as an example.

Uploaded by

savio77
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views3 pages

CS109A Notes For Lecture 1/19/96 Recursive Denition of Expressions Basis: Induction

The document discusses recursive definitions of expressions and recursive programming. It provides examples of: 1) Recursively defining expressions with binary operators using a basis of operands being expressions and an induction of combining expressions with operators. 2) Proving by complete induction that expressions with binary operators of length n have one more operand than operators. 3) Using recursion to solve problems by expressing solutions in terms of smaller instances, with a basis and induction step. Converting integers to binary is given as an example.

Uploaded by

savio77
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

CS109A Notes for Lecture 1/19/96

Recursive De nition of Expressions

Expressions with binary operators can be de ned


as follows.
Basis: An operand is an expression.
An operand is a variable or constant.

Induction:

1. If 1 and 2 are expressions, and is a binary


operator (e.g., + or ), then 1 2 is an
expression.
2. If is an expression, then ( ) is an expression.
Thus, we can build expressions like
E

o E

x
x

( + )

( + )

An Interesting Proof

( ): An expression with binary operators


of length has one more operand than operators.
Proof is by complete induction on the length (number of operators, operands, and parentheses) of the
expression.
Basis: = 1. must be a single operand. Since
there are no operators, the basis holds.
Induction: Assume (1) (2)
( ). Let
have length + 1 1. How was constructed?
a) If by rule (2), = ( 1), and 1 has length
1.
By the inductive hypothesis ( 1), we
know 1 has one more operand than operators.
But and 1 have the same number of
operators and operands, so holds for
.
S n

;S

>

;:::;S n
E

S n

b) If by rule (1), then = 1 2 .


Both 1 and 2 have length
, because is one symbol and
( 1) +
( 2) =
Let 1 and 2 have and operators, respectively. By the inductive hypothesis,
which applies to both 1 and 2, They
have + 1 and + 1 operands, respectively.
Thus, has ( + 1) + ( + 1) = + + 2
operands.
has + +1 operators; the \+1" is for
the between 1 and 2.
Thus has one more operand than operator, proving the inductive hypothesis.
Note we used all of (1)
( ) in the inductive step.
The fact that \expression" was de ned recursively let us break expressions apart and know
that we covered all the ways expressions could
be built.
E

o E

length E

length E

;:::;S n

Recursion
A style of programming and problem-solving
where we express a solution in terms of
smaller instances of itself.
Uses basis/induction just like inductive proofs
and de nitions.
Basis = part that requires no uses of
smaller instances.
Induction = solution of arbitrary instance in terms of smaller instances.

Why Recursion?

Sometimes it really helps organize your thoughts


(and your code).
2

Example: A simple algorithm for converting integer 0 to binary: Last bit is %2; leading bits
determined by converting 2 until we get down to
0.
i >

i=

main() {
int i;
scanf("%d", &i);
while(i>0) {
putchar('0' + i%2);
i /= 2;
}
putchar('\n');
}

Only one problem: the answer comes out


backwards.
We can x the problem if we think recursively:
Basis: If = 0, do nothing.
Induction: If
0, recursively convert 2.
Then print the nal bit, %2.
i

>

i=

void convert(int i) {
if(i>0) {
convert(i/2);
putchar('0' + i%2);
}
}
main() {
int i;
scanf("%d", &i);
convert(i);
putchar('\n');
}

Class Problem for Next Wednesday

Prove that the above program converts its input


to binary.
What is the inductive hypothesis? The basis?
The inductive step?
3

You might also like