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)
log.info("Disk 1 from " + from + " to " + to);
else{
doTowers(topN-1,from,to,inter); // from --> inter
log.info("Disk " + topN + "from " + from + " to " + to);
doTowers(topN-1,inter,from,to);
}
}



Comments

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" pa...

Live - solving the jasper report out of memory and high cpu usage problems

I still can not find the solution. So I summary all the things and tell my boss about it. If any one knows the solution, please let me know. Symptom: 1.        The JVM became Out of memory when creating big consumption report 2.        Those JRTemplateElement-instances is still there occupied even if I logged out the system Reason:         1. There is a large number of JRTemplateElement-instances cached in the memory 2.     The clearobjects() method in ReportThread class has not been triggered when logging out Action I tried:      About the Virtualizer: 1.     Replacing the JRSwapFileVirtualizer with JRFileVirtualizer 2.     Not use any FileVirtualizer for c...

JasperReports - Configuration Reference

Data Source / Query Executer net.sf.jasperreports.csv.column.names.{arbitrary_name} net.sf.jasperreports.csv.date.pattern net.sf.jasperreports.csv.encoding net.sf.jasperreports.csv.field.delimiter net.sf.jasperreports.csv.locale.code net.sf.jasperreports.csv.number.pattern net.sf.jasperreports.csv.record.delimiter net.sf.jasperreports.csv.source net.sf.jasperreports.csv.timezone.id net.sf.jasperreports.ejbql.query.hint.{hint} net.sf.jasperreports.ejbql.query.page.size net.sf.jasperreports.hql.clear.cache net.sf.jasperreports.hql.field.mapping.descriptions net.sf.jasperreports.hql.query.list.page.size net.sf.jasperreports.hql.query.run.type net.sf.jasperreports.jdbc.concurrency net.sf.jasperreports.jdbc.fetch.size net.sf.jasperreports.jdbc.holdability net.sf.jasperreports.jdbc.max.field.size net.sf.jasperreports.jdbc.result.set.type net.sf.jasperreports.query.chunk.token.separators net.sf.jasperreports.query.executer.factory.{language} net.sf.jasperreports.xpath....