cmps 1371 introduction to computing for engineers recursion
TRANSCRIPT
CMPS 1371Introduction to
Computing for Engineers
RECURSION
Recursion
Simple definition: When a function calls itself
Why: Simple reason: often a problem can
reduce to exactly the same problem but on a slightly simpler task
Recursion
Examples:
Factorial n! = (n)(n-1)(n-2)...(3)(2)(1)
Fibonacci F
n = F
n-1 + F
n-2
A "stack"
Last one in is first one out (LIFO)Takes the element on top
regardless of sizeNot too hard to get to recent
ones…
A stack is used for functions to get space for it's arguments, internal data, and it's return location
Each call to a function gets the room it needs on the stack ("pushed" onto the stack).
Allows calling function over and over…
Recursion vs Iteration
Iteration for loops and while loops that solve a
problem by iterating through steps Recursion
functions that call themselves, moving towards one or more base cases
Sum function
As you may know, finding the sum of a vector in MATLAB is easy—we can use the built-in MATLAB function sum():
<< x = [1 2 3];<< sum(x)ans = 6
However, it is an important programming skill to know how to find the sum of a vector (or an array) without using a built-in function, because many languages do not have such a function.
Iteration for sum function
function result = sum1(x)
for i=1:length(x) result = x(i) + result;
end
Adds each element to result
Recursion for sum function
There are only three possibilities for a vector x:
x is an empty vector, which has the sum 0 x is really just a single element—hence x is already
the sum of the vector x
x is vector with at least two elements, and can thus be divided into two parts;
the first element, x(1) the rest of the vector, x(2:end)
Recursion for sum function
function result = sum2(x)
if ( isempty(x) ) result = 0;elseif ( length(x) == 1) result = x;else
result = x(1) + sum2 (x(2:end)); end
Calls the function over again till it reads all elements
Factorial Function
Create a function to calculate the factorial amount
Result should be as follows:
>> fact(5)ans = 120
Factorial Recursion
Try this:first make a new function “fact”
function y = fact(x)if x==1
y=1;else
y=x*fact(x-1);end
This function calls itself. It’s recursive. How does this work?
Palindromes
Palindrome is a word or sentence that is spelled the same forwards and backwards
Examples: level radar toot i prefer pi Napolean's classic lament:
able was i ere i saw elba
eye kayak racecar
Palindromes
Create a function to determine if a word is a palindrome
How would we do it recursively?
If start and end are the same and the middle is a palindrome, then is true
What are the terminating conditions? if length == 1, yes if length == 2, then
if strcmp(str(1),str(2)), then yes
Palindrome code
function ans = isPal(str)
% is str a palindrome?
% isPal(‘ enter your word ’)
str = lower(str);
if length(str) < 2
ans = true;
disp('your word is a palindrome')
elseif str(1) ~= str(end)
ans = false;
disp('your word is not a palindrome')
else
ans = isPal(str(2:end-1));
end
Recursion Characteristics
There are three necessary characteristics of all recursive functions
1. There must be a terminating condition to stop the process
2. The function must call a clone of itself3. The parameters to that call must move the
function toward the terminating condition
A recursive function does not really call itself because it passes different parameters to the function