
In
factorial(n) = 1, for n = 0
factorial(n) = n * factorial(n-1), for all n > 1
For example, suppose n = 5:
// Recursive call
factorial(5) = 5 * factorial(4)
factorial(4) = 4 * factorial(3)
factorial(3) = 3 * factorial(2)
factorial(2) = 2 * factorial(1)
factorial(1) = 1 * factorial(0)
factorial(0) = 1 // Base case
// Unwinding
factorial(1) = 1 * 1 = 1
factorial(2) = 2 * 1 = 2
factorial(3) = 3 * 2 = 6
factorial(4) = 4 * 6 = 24
factorial(5) = 5 * 24 = 120 (DONE)
Exercise (Factorial) (Recursive): Write a recursive method called factorial() to compute the factorial of the given integer.
public static int factorial(int n)
The recursive
factorial(n) = 1, if n = 0
factorial(n) = n * factorial(n-1), if n > 0
Compare your code with the iteractive version of the factorial():
factorial(n) = 1*2*3*...*n
Hints:
// Return the factorial of the given integer, recursively
public static int factorial(int n) {
if (n == 0) {
return 1; // base case
} else {
return n * factorial(n-1); // call itself
}
// or one liner
// return (n == 0) ? 1 : n*factorial(n-1);
}
Notes:
- Recursive version is often much shorter.
- The recursive version uses much more computation and storage resources, and it need to save its states before each successive recursive call.
Exercise (Fibonacci) (Recursive): Write a recursive method to compute the Fibonacci sequence of n, defined as follows:
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2) for n >= 2
Compare the recursive version with the iteractive version written earlier.
Exercise (A Running Number Sequence) (Recursive): A special number sequence is defined as follows:
S(1) = 1
S(2) = 12
S(3) = 123
S(4) = 1234
......
S(9) = 123456789 // length is 9
S(10) = 12345678910 // length is 11
S(11) = 1234567891011 // length is 13
......
Write a recursive method to compute the length of S(n). Also write an iteractive version.
Exercise (GCD) (Recursive): Write a recursive method called gcd() to compute the greatest common divisor of two given integers.
public static void int gcd(int a, int b)
gcd(a,b) = a, if b = 0
gcd(a,b) = gcd(b, remainder(a,b)), if b > 0
Exercise (Tower of Hanoi Recursive) (Recursive): [TODO]
- Exercises on Algorithms - Sorting and Searching
Efficient sorting and searching are big topics, typically covered in a course called "Data Structures and Algorithms". There are many searching and sorting algorithms available, with their respective strengths and weaknesses. See Wikipedia "Sorting Algorithms" and "Searching Algorithms" for the algorithms, examples and illustrations.
JDK provides searching and sorting utilities in the Arrays class (in package java.util), such as Arrays.sort() and Arrays.binarySearch() - you don't have to write your searching and sorting in your production program. These exercises are for academic purpose and for you to gain some understandings and practices on these algorithms.
Exercise (Linear Search): (Reference: Wikipedia "Linear Search") Compare each item with the search key in the linear manner. Linear search is applicable to unsorted list.
// Return the array index, if key is found; or 0 otherwise
public static int linearSearch(int[] array, int key)
// or
// Return true if the key is found
public static boolean linearSearch(int[] array, int key)
Exercise (Selection Sort): (Reference: Wikipedia "Selection Sort") This algorithm divides the lists into two parts: the left-sublist of items already sorted, and the right-sublist for the remaining items. Initially, the left-sorted-sublist is empty, while the right-unsorted-sublist is the entire list. The algorithm proceeds by finding the smallest (or largest) items from the right-unsorted-sublist, swapping it with the leftmost element of the right-unsorted-sublist, and increase the left-sorted-sublist by one.
For example, given the list {9 6 4 1 5}:
{} {9 6 4 1 5} -> {} {1 6 4 9 5}
{1} {6 4 9 5} -> {1} {4 6 9 5}
{1 4} {6 9 5} -> {1 4} {5 9 6}
{1 4 5} {9 6} -> {1 4 5} {6 9}
{1 4 5 6} {9} -> DONE
{1 4 5 6 9}
Write a method to sort an int array (in place) with the following signature:
public static void selectionSort(int[] array)

Trending nowThis is a popular solution!
Step by stepSolved in 3 steps with 2 images

- In kotlin, Write a recursive linear search function that takes a String and a Char and returns true if the String contains the Char. The base cases are that a) the length of the String is 0 or b) the first character in the String is the character we are searching for. then Modify the linear search function so that both the String and the Char are nullable. If either is null, return false.arrow_forwarda. Correctness of dynamic programming algorithm: Usually, a dynamic programming algorithm can be seen as a recursion and proof by induction is one of the easiest way to show its correctness. The structure of a proof by strong induction for one variable, say n, contains three parts. First, we define the Proposition P(n) that we want to prove for the variable n. Next, we show that the proposition holds for Base case(s), such as n = 0, 1, . . . etc. Finally, in the Inductive step, we assume that P(n) holds for any value of n strictly smaller than n' , then we prove that P(n') also holds. Use the proof by strong induction properly to show that the algorithm of the Knapsack problem above is correct. b. Bounded Knapsack Problem: Let us consider a similar problem, in which each item i has ci > 0 copies (ci is an integer). Thus, xi is no longer a binary value, but a non-negative integer at most equal to ci , 0 ≤ xi ≤ ci . Modify the dynamic programming algorithm seen at class for this…arrow_forwardCan you please help me solve problem 2?arrow_forward
- Let recursive algorithm F be defined as follows: F(int n):if n=1 then return 1else return F(n-1)*n (a) i. Assuming x is a positive integer, what mathematical expression is returned by F(x)?ii. Repeat (i) but assume the line “return 1” is replaced by “return 0”? (b) Which of the following replacements for the last line will yield a function guaranteed to terminate for all valid inputs? i. return F(n-2)+2ii. return F( )*2iii. return F( )*2arrow_forwardConsider a recursive function, called f, that computes powers of 3 using only the + operator. Assume n > = 0. int f(int n) { if (n == 0) return 1; return f(n-1) + f(n-1) + f(n-1); } Give an optimized version of f, called g, where we save the result of the recursive call to a temporary variable t, then return t+t+t. i got int g(int n) { if (n == 0) return 1; int t = g(n - 1); return t+t+t; } so now Write a recurrence relation for T(n), the number addition operations performed by g(n) in terms of n.arrow_forwardGive a recursive definition for the set of all strings of a’s and b’s that begins with an a and ends in a b. Say, S = { ab, aab, abb, aaab, aabb, abbb, abab..} Let S be the set of all strings of a’s and b’s that begins with a and ends in a b. The recursive definition is as follows – Base:... Recursion: If u ∈ S, then... Restriction: There are no elements of S other than those obtained from the base and recursion of S.arrow_forward
- write a c++ recursive function to solve the following: str contains a single pair of parenthesis, return a new string // made of only the parenthesis and whatever those parensthesis contain. You can use substr in this problem. // // Pseudocode Example:// findParen("abc(ghj)789") => "(ghj)" // findParen("(x)7") => "(x)" // findParen("4agh(y)") => "(y)" // string findParen(string str) { }arrow_forwardWhich of the following is the recursive definition for the function f(n)=2n with initial condition f(1) = 2? f(n) = 2n + f(n-1) f(n) = 2n - f(n-1) f(n) = 2n * f(n-1) f(n) = 2f(n − 1) Which of the following is the recursive definition for the function f(n)=5n+2 with initial condition f(1)=7? f(n) = 5n - f(n-1) f(n) = 5f(n-1) + 2 f(n) = 5n + f(n-1) f(n) = f(n-1) + 5arrow_forwardGiven three sequences of length m, n, and p each, you are to design and analyze an algorithm to find the longest common subsequence (LCSS) for the three sequence. Is it possible to use dynamic programming to find the LCSS between the three sequences? If yes, provide recursive solution to the above problem.arrow_forward
- Consider the recursive function provided above. After the initial call to the function ham has been made with argument 26 then how many subsequent recursive calls will be made before a value a final result can be returned? This question is internally recognized as variant 235. Q11) 1 2 3 4 5 6 7 8 none of the abovearrow_forwardWrite a recursive Racket function "update-if" that takes two functions, f and g, and a list xs as parameters and evaluates to a list. f will be a function that takes one parameter and evaluates true or false. g will be a function that takes one parameter and evaluates to some output. The result of update-if should be a list of items such that if x is in xs and (f x) is true, then (g x) is in the list. The output list's elements should keep the input list's items in the same relative order. For example (update-if even? add1 '(1 2 3 4)) should evaluate to '(3 5) because 2 and 4 make even? true and add1 turns 2 and 4 into 3 and 5.arrow_forwardWrite a recursive function, numMoves(), that takes a number representing the number of disks in the Hanoi problem, and returns the number of moves involved. I recommend you start writing this function by modifying the hanoi.py program given. Test cases: numMoves(3) should return 7 and numMoves(4) should return 15. Do not use any global variables. hanoi.pyarrow_forward
- Database System ConceptsComputer ScienceISBN:9780078022159Author:Abraham Silberschatz Professor, Henry F. Korth, S. SudarshanPublisher:McGraw-Hill EducationStarting Out with Python (4th Edition)Computer ScienceISBN:9780134444321Author:Tony GaddisPublisher:PEARSONDigital Fundamentals (11th Edition)Computer ScienceISBN:9780132737968Author:Thomas L. FloydPublisher:PEARSON
- C How to Program (8th Edition)Computer ScienceISBN:9780133976892Author:Paul J. Deitel, Harvey DeitelPublisher:PEARSONDatabase Systems: Design, Implementation, & Manag...Computer ScienceISBN:9781337627900Author:Carlos Coronel, Steven MorrisPublisher:Cengage LearningProgrammable Logic ControllersComputer ScienceISBN:9780073373843Author:Frank D. PetruzellaPublisher:McGraw-Hill Education





