我只想事先知道这是一项家庭作业。我已经以许多不同的方式尝试了该问题,以至于我对为什么我没有得到期望的输出一无所知。
编写一个程序,该程序将跟踪如何递归生成斐波那契数(对于任何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传递给该方法,并在创建对象时在我的公共a5class中将其等于0,但到目前为止还算不上成功。
虽然我的离我可能还不算太远,但我注意到它退出了3级,然后在下一个顺序中重新输入了它,这在逻辑上似乎也不正确。
感谢您的帮助或指导。即使只是指向正确方向的指针也值得赞赏。我认真对待我的编程,想真正理解它。我不想“伪造”自己的方式并没有价值。
谢谢!
从预期的输出中,您将看到程序希望直接从0级进入2级,并从2级进入4级。只有在第一次递归调用中将2级添加到该级时,才会发生这种情况:
fibWork = trace(t-2, level+2) + trace(t-1, level+1);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句