首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fibonacci痕迹

Fibonacci痕迹
EN

Stack Overflow用户
提问于 2013-10-02 23:06:27
回答 1查看 1.8K关注 0票数 5

我只想说这是个家庭作业。我用了很多不同的方法尝试过这个问题,以至于我对为什么我没有得到期望的输出完全没有想法。

问题

编写一个程序来跟踪斐波纳契数字是如何递归生成的(对于任何N),并以以下方式显示跟踪:

示例(N=4):

代码语言:javascript
复制
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

我的主语是:

代码语言:javascript
复制
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);

}
}

我的班级:

代码语言:javascript
复制
 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; 
        }
}
}

(我把它放在那里,这样我就能看到它现在更容易离开的地方)

我的产出:

代码语言:javascript
复制
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级,然后在下一个序列中重新进入它,这似乎在逻辑上也是不正确的。

我感谢任何帮助或指导。即使是一个正确方向的指针也是值得赞赏的。我认真对待我的编程,并想真正理解它。我不想“假冒伪劣”地通过它,而拥有一个毫无价值的学位。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-02 23:13:31

从预期的输出中,您将看到程序希望直接从级别0进入级别2,从级别2进入级别4。只有在第一次递归调用中将2添加到级别2时,才会发生这种情况:

代码语言:javascript
复制
fibWork = trace(t-2, level+2) + trace(t-1, level+1);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19148239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档