斐波那契追踪

5
我想提前说明这是一个家庭作业。我已经尝试了很多不同的方法来解决问题,但是我已经没有任何想法为什么我没有得到期望的输出。
问题
编写一个程序,以递归方式跟踪如何生成斐波那契数(对于任何N),并以以下方式显示跟踪:
示例(N=4):
Entering level 0
Entering level 2
Entering level 4
Exiting level 4
Entering level 3
Exiting level 3
Exiting level 2
Entering level 1
Entering level 3
Exiting level 3
Entering level 2
Entering level 4
Exiting level 4
Entering level 3
Exiting level 3
Exiting level 2
Exiting level 1
Exiting level 0

我的主要:

public class A5main {

public static void main(String[] args) {
    //n holds user input
    //level is the current level of the tree
    //fibonacci is a5class object
    int n;
    int level=0;
    a5class fibonacci= new a5class();
    Scanner keyboard = new Scanner(System.in);

    //Ask user for input

   System.out.println("Enter a number up to which Fibonacci series to print: ");
   n = keyboard.nextInt();
   System.out.println("Fibonacci trace of: " + n);

    //Pass input to fibonacci.trace method with arguments n, level.
   fibonacci.trace(n,level);

}
}

我的班级:

 package a5main;
 public class a5class {
    int fibWork;
   public a5class()     
{ 
}
public int trace(int t, int level)
{
    //Accepts t and level as an argument.
    //Lets uer know what level they are entering 
    System.out.println("Now entering level " + level);
    //If t<=1 just return the value
        if (t<=1)
        {
            System.out.println ("\tNow exiting level " + level);
            return t;

        }
        //Else use recurssion to figure out the fibonacci sequence
        //and determine what level you are on.
        else
        {
            fibWork = trace(t-1, level+1) + trace(t-2, level+1);
            System.out.println ("\tNow exiting level " + level);
            return t; 
        }
}
}

(我在这里放了 \t,以便更容易看到它的退出位置)

我的输出:

Enter a number up to which Fibonacci series to print: 
4
Fibonacci trace of: 4
Now entering level 0
Now entering level 1
Now entering level 2
Now entering level 3
     Now exiting level 3
Now entering level 3
     Now exiting level 3
     Now exiting level 2
Now entering level 2
     Now exiting level 2
     Now exiting level 1
Now entering level 1
Now entering level 2
     Now exiting level 2
Now entering level 2
     Now exiting level 2
     Now exiting level 1
     Now exiting level 0

我还尝试过在创建对象时不将“level”传递到方法中,而是让它等于0,但是到目前为止没有成功。

虽然我的方法可能并不完全错误,但是我注意到它在退出第3级别后,并在下一个序列中重新进入该级别,这似乎也不正确。

我非常感谢任何帮助或指导。即使只是给出正确方向的指针也会受到赞赏。我认真对待编程,并希望真正理解它。 我不想“假装”通过,并获得毫无价值的学位。

谢谢!


1
对于else情况,你应该返回fibWork而不是t(总和)。 - Gyro Gearless
我之前的某个版本中有这个,我同意。那样会更有意义。 - Thomas J Scott
1个回答

2
从期望的输出结果可以看出,程序期望从 level 0 直接进入 level 2,并且从 level 2 进入 level 4。只有在第一个递归调用中将 level 加 2,才能实现这一点。
fibWork = trace(t-2, level+2) + trace(t-1, level+1);

那就是解决方法,Joni。非常感谢你的帮助。我甚至没有想到过这个! - Thomas J Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接