Fibonacci problem

B

Brett Trost

OK, I wanted to make a recursive fibonacci method in Perl, and I can't
understand why it is not working, especially since I wrote the exact
same thing in Java and it works. Here's the perl code:

#!/usr/bin/perl
sub fib {
$num = shift;
return 0 if $num == 1;
return 1 if $num == 2;
return fib($num - 1) + fib($num - 2);
}

print fib($ARGV[0]);

And here's the Java code:

class fib
{
public static void main(String[] args)
{
System.out.println(fib(Integer.parseInt(args[0])));
}

static int fib(int x) {
if (x == 1) return 0;
if (x == 2) return 1;
return fib(x - 1) + fib(x - 2);
}
}

The perl one keeps on running forever. If I print out $num, it goes
rapidly into the negatives. Why is this, when the base case should
take care of that, and the Java code has the exact same logic and
works?! It must be an error with my Perl, but I can't find it.
Thanks for any help.
 
J

Jürgen Exner

Brett said:
OK, I wanted to make a recursive fibonacci method in Perl, and I can't
understand why it is not working, especially since I wrote the exact
same thing in Java and it works. Here's the perl code:

#!/usr/bin/perl

There is a "use strict;" missing here ...
sub fib {
$num = shift;

....which would have told you that $num requires a declaration.
You are using the _global_ variable $num, not a variable that is local to
the sub.
return 0 if $num == 1;
return 1 if $num == 2;
return fib($num - 1) + fib($num - 2);
}

jue
 
L

lesley_b_linux

OK, I wanted to make a recursive fibonacci method in Perl, and I can't
understand why it is not working, especially since I wrote the exact
same thing in Java and it works. Here's the perl code:

#!/usr/bin/perl
sub fib {
$num = shift;
return 0 if $num == 1;
return 1 if $num == 2;
return fib($num - 1) + fib($num - 2);
}

print fib($ARGV[0]);
The perl one keeps on running forever. If I print out $num, it goes
rapidly into the negatives. Why is this, when the base case should
take care of that, and the Java code has the exact same logic and
works?! It must be an error with my Perl, but I can't find it.
Thanks for any help.

I put in

#! /usr/bin/perl -w

at the start and debugged ....
../test.pl 8
Deep recursion on subroutine "main::fib" at ./test.pl line 7.

Adding :

#! /usr/bin/perl -w
use strict;

and using

my $num = shift;

gives the right results.

hth

Lesley
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,904
Latest member
HealthyVisionsCBDPrice

Latest Threads

Top