Skip to main content

Java - Algorithms (Part 2)

Reversion:  It may be amazing that a method can call itself, but why shouldn't it be able to? A method call is a transfer of  control to the start of the method. This transfer of control can take place from within the method as well as from outside.

All this may seem like passing the bulk. Someone tells me to find the 9th triangular number. I know this is 9 plus the 8th triangular number, so I called Martin and ask him to find 8th number.When I hear back from him, I'll add 9 to whatever he tells me and that will be the answer. Martin will ask 7th number from other person. This process continues with each person passing the buck to another one. Where does this buck-passing end? Someone at some point must be able to figure out an answer that doesn't involve asking another person to help them.

The Characteristics of Recursive methods:
. it calls itself
. when it calls itself, it does so to solve a smaller problem. In each successive call of a recursive method to itself, the argument becomes smaller(or perhaps a range described by multiple arguments becomes smaller), reflecting the fact that the problem has become "smaller" or easier.
. There's some version of the problem that is simple enough that the routine can solve it, and return, without calling itself.

Is recursion Efficient? Calling a method involves certain overhead. control must be transferred from the location of the call to the beginning of the method. In addition, the arguments to the method, and the address to which the method should return, must be pushed onto an internal stack so that the method can access the argument values and know where to return.

Towers of Hanoi algorithm:
1. move the subtree consisting of the top n-1 disks from S(source Tower) to I(Intermediate tower)
2. Move the remaining (largest) disk from S to D(Destination Tower)
3.Move the subtree from I to D
public static void doTowers(int topN, char from, char inter, char to){
if(topN ==1)"Disk 1 from " + from + " to " + to);
doTowers(topN-1,from,to,inter); // from --> inter"Disk " + topN + "from " + from + " to " + to);


Popular posts from this blog

Stretch a row if data overflows in jasper reports

It is very common that some columns of the report need to stretch to show all the content in that column. But  if you just specify the property " stretch with overflow' to that column(we called text field in jasper report world) , it will just stretch that column and won't change other columns, so the row could be ridiculous. Haven't find the solution from internet yet. So I just review the properties in iReport one by one and find two useful properties(the bold highlighted in example below) which resolve the problems.   example:
<band height="20" splitType="Stretch"> <textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true"> <reportElement stretchType="RelativeToTallestObject" mode="Opaque" x="192" y="0" width="183" height="20"/> <box leftPadding="2"> <pen lineWidth="0.25"/> …

JasperReports - Configuration Reference

Spring - Operations with jdbcTemplate

This class manages all the database communication and exception handling using a java.sql.Connection that is obtained from the provided DataSource. JdbcTemplate is a stateless and threadsafe class and you can safely instantiate a single instance to be used for each DAO.

Use of Callback Methods
JdbcTemplate is based on a template style of programming common to many other parts of Spring. Some method calls are handled entirely by the JdbcTemplate, while others require the calling class to provide callback methods that contain the implementation for parts of the JDBC workflow. This is another form of Inversion of Control. Your application code hands over the responsibility of managing the database access to the template class. The template class in turn calls back to your application code when it needs some detail processing filled in. These callback methods are allowed to throw a java.sql.SQLException, since the framework will be able to catch this exception and use its built-in excepti…