Hi Theodore, AFAICS there is nothing wrong with your "isNumber" method (besides that Integer.parseInt(String s) and catching the NumberFormatException is much shorter).
I have no proof at hand, but I remember that each recursive call has a loop
equivalent and vice versa.
So assume you have a something like
public void printNumber(int start, int stop) {
for (int i = start; i<=stop; i++) {
System.out.println(i);
}
}
You can make a recursive version like
public void printNumbersRecursive(int start, int stop) {
if (start <= stop) {
System.out.println(start);
printNumbersRecursive(start+1, stop);
}
}
In this case I would aways prefer the loop-version. It somehow feels more
natural to me.
But there are problems where recursion can be very handy. E.g. if you have
non-linear structures like trees.
Assume the following class:
public class MyNode {
private String name;
private NSMutableArray<MyNode> children = new NSMutableArray<MyNode>();
public MyNode(String name) {
this.name = name;
}
public void addToChildren(MyNode child) {
children.addObject(child);
}
}
and you build the following structure with it
public static void main(String[] args) {
MyNode root = new MyNode("root");
MyNode child1 = new MyNode("child1");
root.addToChildren(child1);
MyNode child2 = new MyNode("child2");
root.addToChildren(child2);
MyNode child11 = new MyNode("child11");
child1.addToChildren(child11);
MyNode child12 = new MyNode("child12");
child1.addToChildren(child12);
}
If you want to do something on all nodes (also called 'traversion'), e.g. write
a debug info to the console, I would code this like
public void debug() {
System.out.println("node: "+name);
System.out.println("children: [");
for (MyNode child : children) {
// recursion
child.debug();
}
System.out.println("]");
}
A call of root.debug() in the main method would produce
node: root
children: [
node: child1
children: [
node: child11
children: [
]
node: child12
children: [
]
]
node: child2
children: [
]
]
A non-recursive version of the debug method would be much more complicated.
Jm2c
C.U.CW
--
What are the three enemies of a programmer? Sunlight, oxygen, and the appalling
roar of the birds.
On 12.11.2014, at 12:32, Theodore Petrosky <[email protected]> wrote:
> I am trying like mad to learn more. So I have decided to put time into
> Recursive algorithms. I do not want to start a conversation whether or not
> one should or should not use recursion in this example. That is a
> conversation for another day. I don’t believe that using it here will impact
> the app at all.
>
> As an experiment I am trying to use one in my validation method. Would one of
> you great minds take a look at this. It works, but I feel I am jumping
> through too many hoops. This is my first attempt so have a little pity:
>
>
> public String validateHeight(String value) throws ValidationException {
> value = value.trim();
>
> if (!isNumber(value)) {
> throw new ValidationException("There can be only
> numbers in the Height field! (value was " + value +")");
> }
> return value;
> }
>
> private boolean isNumber(String stringToCheck) {
> if (stringToCheck.length() == 0) return true;
> if (!Character.isDigit(stringToCheck.charAt(0))) return false;
> return isNumber(stringToCheck.substring(1,
> stringToCheck.length()));
> }
>
>
> My desire is to get better at this and learning recursion is very important.
> Also, when I look at other people’s code, there are times that there are
> recursive calls and I struggle to understand them.
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/cw%40i4innovation.de
>
> This email sent to [email protected]
>
signature.asc
Description: Message signed with OpenPGP using GPGMail
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list ([email protected]) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to [email protected]
