【问题标题】:Fibonacci Riddle almost right in need of a quick fix and an easy solve斐波那契谜题几乎需要快速修复和简单解决
【发布时间】:2013-04-15 21:52:53
【问题描述】:

帮助我有一个需要解决的难题! 我做了一个斐波那契数列,但我忘了包括 0 谁能帮我解开这个谜语? 如果序列中输入为 5,则输出应为 0,1,1,2,3 在不完全从头开始的情况下,我应该更改什么来清理代码并获得所需的结果?

//Class Assignment 9 little Fibonacci series based on what input
//the user provides
import java.util.Scanner;
public class LittleFibonacci {

    int number;// This declares an int variable
    public static void main(String[] args){

        //itnu is the new object
        LittleFibonacci itnu = new LittleFibonacci ();
        itnu.GetNumberInput();
     }

    public void GetNumberInput()
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a number and that number will be a" +
                " \nrepresentitive of the length of a sequence in the Fibonocci series.");
        number = input.nextInt();
        int f1, f2=0, f3=1;

        for(int i = 1 ; i <= number ; i++ )
        {
            System.out.print(" "+f3+" ");
            f1 = f2;
            f2 = f3;
            f3 = f1 + f2;
        }    
        input.close();
    }

}

【问题讨论】:

  • 在您的for 循环开始之前将您的代码更改为输出0,并将循环迭代次数缩短1(通过从循环终止值中删除一个字符)。
  • 注意是斐波那契,不是斐波那契。

标签: java fibonacci


【解决方案1】:

只需从 0 而不是 1 开始循环,并相应地更改 {f1,f2,f3} 的初始化(留给读者作为练习)。

这里告诉您首先输出零的其他解决方案基本上是作弊。你不妨硬编码所有的斐波那契数。这样做你不会得到任何分数。

【讨论】:

    【解决方案2】:

    添加

     System.out.print(" "+f2+" ");
    

    在 for 循环之前。将 for 循环终止条件更改为

    我想要真正的完整,我们还应该检查用户没有输入 0(或负数),在这种情况下甚至不打印 f2。

    这可能看起来有点“不干净”,但斐波那契数列有两个起始数字,它们很特殊,需要特殊处理。

    【讨论】:

    • 提供一般说明而不是编写代码不是更好吗,这样发帖人就可以弄清楚并在此过程中学到一些东西?
    • 两个起始编号不需要特殊处理。只需更改三个常量,即可使 OP 的代码正常工作。
    【解决方案3】:

    我会采取的方法是先打印您的基本案例,然后在每次迭代后重置它们

    int fPrev = 0, fCur = 1;
    
    System.out.print(fPrev+" "+fCur);
    
    for(int i = 2 ; i <= number ; i++ )
    {
        int fNew = fPrev + fCur
    
        System.out.print(" "+fNew);
        fPrev = fCur;
        fCur = fNew;
    } 
    

    【讨论】:

    • 如果我把部分完成的作业丢在这里,你也会帮我做吗?这样,除了如何复制和粘贴代码之外,我无需学习任何东西。 (我现在没有注册任何编程课程,但如果你要为我做这一切,我会开始的。)
    • @KenWhite 你会惊讶于你可以从阅读别人的代码中学到什么。
    • 是的。除非你通过学习修复你发现不起作用的东西来学习更多。如果发帖者足够了解已经编写了 q 中发布的代码,那么关于需要更改的内容和弄清楚如何应用它的一般指南将更加有用。有时,对自己的代表的贪婪并不是在这里回答问题的最佳方式;有时,一点判断可能更有价值。 (例如,请参阅我对 q 的评论,该评论是在此处给出任何答案之前发布的。)但这没关系。您最了解哪些语言,所以我会知道要注册什么?
    • @KenWhite 你不一定要了解更多。你会学到不同的东西。如果每个人都通过自学来解决编码问题,你就不会有这些所谓的“设计模式”
    • 但是在您真正开始编写自己的代码之前,您不会学习如何将设计模式实际应用到您自己的代码中。当你教孩子做基础数学时,你不会说“1 + 1 是多少。我会告诉你 - 是 2。1 + 2 是什么?我会告诉你 - 是 3。”你教他们,然后问他们问题,给他们时间在给出答案之前弄清楚。我认为 SO 也应该是一种教学资源,而不仅仅是“请写我的代码。好的,给你”。地方。仅提供代码就意味着我们会收到更多“向我发送代码”的问题。我不想鼓励他们。
    猜你喜欢
    • 2012-11-29
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2016-04-21
    • 2010-10-12
    相关资源
    最近更新 更多