Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total...

20
Recursion
  • date post

    22-Dec-2015
  • Category

    Documents

  • view

    221
  • download

    0

Transcript of Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total...

Page 1: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion

Page 2: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Sum a list of numbers

Iterativedef sum(L): total = 0 for i in L: total += ireturn total

Recursivedef sum(L): if len(L) == 0: return 0 else: return L[0]+

sum(L[1:])

Page 3: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

How iteration works

def sum(L): total = 0 for i in L: total += ireturn total

• sum([4,5,6]) total = 0i = 4total = 0 + 4 = 4i = 5total = 4 + 5 = 9i = 6total = 9 + 6 =

15• 15

Page 4: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

How recursion works

def sum(L): if len(L) == 0: return 0 else: return L[0]+

sum(L[1:]

•sum([4,5,6]) •4+sum([5,6]) •5+sum([6])

•6+sum([ ]) •0 •6 + 0 = 6 •5 + 6 = 11 •4 + 11 = 15•15

Page 5: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Side by side

sum([4,5,6]) total = 0i = 4total = 0 + 4 = 4i = 5total = 4 + 5 = 9i = 6total = 9 + 6 =

15• 15

•sum([4,5,6]) •4+sum([5,6]) •5+sum([6])

•6+sum([ ]) •0 •6 + 0 = 6 •5 + 6 = 11 •4 + 11 = 15•15

Page 6: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Fact

• Iteration and recursion are equivalent.Any iteration can be replaced by recursion.Any recursion can be replaced by iteration.

Page 7: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Why use Recursion?

• Clarity: The logic of certain task can sometimes be clarified.

• Elegance: The coding is sometimes more elegant.

Page 8: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

A recursive algorithm must…

…have a base case.

def sum(L): if len(L) == 0: return 0 else: return L[0]+ sum(L[1:])

Empty list [ ] isthe base case

Page 9: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

A recursive algorithm must…

…have a base case.

…change its state and move toward the base case.

def sum(L): if len(L) == 0: return 0 else: return L[0]+ sum(L[1:])

L L[1:]

Closer to [ ]

Page 10: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

A recursive algorithm must…

…have a base case.

…change its state and move toward the base case.

…call itself, recursively.

def sum(L): if len(L) == 0: return 0 else: return L[0]+ sum(L[1:])

Page 11: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion Worksheet

def sum(L): if len(L) == 0: return 0 else: return \

L[0]+sum(L[1:])

a = sum([4,5,6])

Function In:Base In: Base Out:Recursion In: Recursion Out:Function Out:

Value Type

1. Input simplified:2. Input types match:3. Output types match:

Page 12: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion Worksheet

def sum(L): if len(L) == 0: return 0 else: return \

L[0]+sum(L[1:])

a = sum([4,5,6])

Function In:Base In: Base Out:Recursion In: Recursion Out:Function Out:

Value Type

1. Input simplified:2. Input types match:3. Output types match:

[4,5,6] list

Page 13: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion Worksheet

def sum(L): if len(L) == 0: return 0 else: return \

L[0]+sum(L[1:])

a = sum([4,5,6])

Function In:Base In: Base Out:Recursion In: Recursion Out:Function Out:

Value Type

1. Input simplified:2. Input types match:3. Output types match:

[4,5,6] list[ ]   list

Page 14: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion Worksheet

def sum(L): if len(L) == 0: return 0 else: return \

L[0]+sum(L[1:])

a = sum([4,5,6])

Function In:Base In: Base Out:Recursion In: Recursion Out:Function Out:

Value Type

1. Input simplified:2. Input types match:3. Output types match:

[4,5,6] list[ ]   list 0 number

Page 15: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion Worksheet

def sum(L): if len(L) == 0: return 0 else: return \

L[0]+sum(L[1:])

a = sum([4,5,6])

Function In:Base In: Base Out:Recursion In: Recursion Out:Function Out:

Value Type

1. Input simplified:2. Input types match:3. Output types match:

[4,5,6] list[ ]   list 0 number

[5,6] list

Page 16: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion Worksheet

def sum(L): if len(L) == 0: return 0 else: return \

L[0]+sum(L[1:])

a = sum([4,5,6])

Function In:Base In: Base Out:Recursion In: Recursion Out:Function Out:

Value Type

1. Input simplified:2. Input types match:3. Output types match:

[4,5,6] list[ ]   list 0 number

[5,6] list 11 number

Page 17: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion Worksheet

def sum(L): if len(L) == 0: return 0 else: return \

L[0]+sum(L[1:])

a = sum([4,5,6])

Function In:Base In: Base Out:Recursion In: Recursion Out:Function Out:

Value Type

1. Input simplified:2. Input types match:3. Output types match:

[4,5,6] list[ ]   list 0 number

[5,6] list 11 number

4+11 number

Page 18: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion Worksheet

def sum(L): if len(L) == 0: return 0 else: return \

L[0]+sum(L[1:])

a = sum([4,5,6])

Function In:Base In: Base Out:Recursion In: Recursion Out:Function Out:

Value Type

1. Input simplified:2. Input types match:3. Output types match:

[4,5,6] list[ ]   list 0 number

[5,6] list 11 number

4+11 number

Page 19: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion Worksheet

def sum(L): if len(L) == 0: return 0 else: return \

L[0]+sum(L[1:])

a = sum([4,5,6])

Function In:Base In: Base Out:Recursion In: Recursion Out:Function Out:

Value Type

1. Input simplified:2. Input types match:3. Output types match:

[4,5,6] list[ ]   list 0 number

[5,6] list 11 number

4+11 number

Page 20: Recursion. Sum a list of numbers Iterative def sum(L): total = 0 for i in L: total += i return total Recursive def sum(L): if len(L) == 0: return 0 else:

Recursion Worksheet

def sum(L): if len(L) == 0: return 0 else: return \

L[0]+sum(L[1:])

a = sum([4,5,6])

Function In:Base In: Base Out:Recursion In: Recursion Out:Function Out:

Value Type

1. Input simplified:2. Input types match:3. Output types match:

[4,5,6] list[ ]   list 0 number

[5,6] list 11 number

4+11 number