Menu
blog.headdesk.me
blog.headdesk.me

Recursive programming

Posted on 2015/04/242015/06/24

This morning I passed by my secondary school campus. It has changed a lot with 2 brand new buildings. I started to learn programing in that school, where they taught me about palindrome and some very basic programming lessons. I don’t even remember what language was used back then. Probably basic.

Then I remember learning about OO and algorithms in university. One thing that still stick, well aside from some vague memory of OO principles, is recursive function. When I first heard about it, it’s a puzzle and very difficult to understand even when the source code is provided. But as I learned about it, I think it’s very clever.

It’s been 7-8 years since I wrote any code. I do shell scripts mostly which is just a bunch of procedures. Doesn’t require any algorithm. So I decided to write a recursive function which finds the smallest number from a list.

If I remember right, recursion involves 2 important parts. An ever reducing input data set and a finite condition. We feed the function a dataset, which returns a smaller dataset and in turn it’s fed to the same function. The result is returned to the previous level when a finite condition is met.

Here it is the source code. findMin is the recursive function. It compares the first number in a list with the rest of the numbers. When the rest of the numbers become just 1 number, a comparison result is returned. I certainly welcome any criticism or comments.

Yes I know I can do Collections.min() which probably is smarter and faster.

[code language=”java”]
import java.util.*;
public class Recurse {

public static void main(String args[]) {
// Create a list of random numbers
Random rand = new Random();

ArrayList<Integer> testData = new ArrayList<Integer>();
while ( testData.size() < 10 ) {
testData.add(rand.nextInt(99));
}

ArrayList<Integer> testDataCopy = new ArrayList<Integer>(testData);

// Display test data
System.out.println("Random numbers: " + testData.toString());

// Throw list into recursion
System.out.println("Smallest number: " + findMin(testData));

// Of course Java can do this for you
System.out.println("Result from Java Collections: " + Collections.min(testDataCopy));
}

public static int findMin(ArrayList<Integer> list) {
// If list is not 1 number, feed it back to same method
if (list.size() > 1) {
int tmpNum = list.get(0);
list.remove(0);
int tmpNum2 = findMin(list);
if (tmpNum < tmpNum2) {
return tmpNum;
} else {
return tmpNum2;
}
} else {
// Finite condition met, return number
return list.get(0);
}
}
}

[/code]

facebookShare on Facebook
TwitterTweet

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Full text search

Recent Posts

  • Terraform and segregated permissions
  • LVM Compression and Deduplication
  • Edit gpg encrypted file with vim
  • Lelit Elizabeth PL92T Pressure Tuning
  • jq transformation
  • aws (8)
  • coffee (1)
  • headfi (1)
  • linux (6)
  • others (58)
  • security (2)
  • tech (36)
  • wordpress (2)

apache aws awscli azure backup clearlinux cloud coffee docker DOCP ec2 EL8 epyc espresso featured gpg jenkins kernel lelit linux lvm meltdown memory MFA mikrotik php python rdp Redhat RHEL roasting rpm Ryzen site-to-site snapshot spectre tech terraform tuning ubuntu ubuntu upgrade vim vpn wordpress xdotool

©2023 blog.headdesk.me | Powered by SuperbThemes & WordPress