当前位置: 首页 > 面试题库 >

在Java中使用线程和递归来计算斐波那契数

裴浩歌
2023-03-14
问题内容

我在Java世界中相对较新,遇到了一个我不明白的问题。

我有一堂课(去斐波那契行):

class Fib {
    public static int f(int x){
        if ( x < 2 )
            return 1;       
        else 
            return f(x-1)+ f(x-2);      
    }
}

现在的任务是在单独的线程中分别启动f(x-1)和f(x-2)。一次实现Thread类,另一次实现Runnable。您可能知道,这是我教授的一项练习。

我知道如何在Java中启动线程,并且从理论上知道整个Thread的工作原理,但是我找不到在此递归函数中启动单独的线程的解决方案。

运行功能必须做什么?

大概

public void run(){
//int foo=start f(this.x-1)
    //int bar=start f(this.x-2)  
    //return foo+bar?
}

以及如何在可运行函数中粘贴x?x是在创建时传递给对象的吗?

Class Fib ...{
  int x;
  public ... run ... 
  public ... f(x)....

}

在主要方法中

(new Fib(x)).start();

还是我走在一条完全错误的道路上?


问题答案:

为此,您需要1)一种将数字传递到新线程中的方法,2)启动线程,3)等待线程完成,以及4)从线程中获取结果的方法。

您可以通过构造函数传递数字。您可以有一个名为“答案”的公共数据成员来包含计算结果。可以使用start()方法完成启动线程,然后该join()方法等待线程完成。

下面的示例演示了这一点。那应该是一个很好的起点;从这里,您可以消除一些混乱,以根据需要获得更好的API。

public class Fib extends Thread
{
    private int x;
    public int answer;

    public Fib(int x) {
        this.x = x;
    }

    public void run() {
        if( x <= 2 )
            answer = 1;
        else {
            try {
                Fib f1 = new Fib(x-1);
                Fib f2 = new Fib(x-2);
                f1.start();
                f2.start();
                f1.join();
                f2.join();
                answer = f1.answer + f2.answer;
            }
            catch(InterruptedException ex) { }
        }
    }

    public static void main(String[] args)
        throws Exception
    {
        try {
            Fib f = new Fib( Integer.parseInt(args[0]) );
            f.start();
            f.join();
            System.out.println(f.answer);
        }
        catch(Exception e) {
            System.out.println("usage: java Fib NUMBER");
        }
    }
}


 类似资料:
  • 问题内容: 请解释以下简单代码: 我对最后一行感到困惑,特别是因为例如,如果n = 5,则将调用fibonacci(4)+ fibonacci(3),依此类推,但我不理解该算法如何以此来计算索引5的值方法。请详细解释! 问题答案: 在斐波那契数列中,每一项都是前两项的总和。因此,你编写了一个递归算法。 所以, 现在你已经知道了。因此,你可以随后计算其他值。 现在, 从斐波那契数列中我们可以看到斐波

  • 我试图想出一个程序,从用户那里获取任何数字,并生成斐波那契码的第n个数字。当我完成工作时,它会显示下一个,而不是我需要的。例如,我正在寻找第11个#和它的生产233而不是144。这是我的代码:

  • 问题内容: 我在大学为我的Programming II类编写的程序需要一些帮助。这个问题要求人们使用递归来计算斐波那契数列。必须将计算出的斐波那契数存储在一个数组中,以停止不必要的重复计算并减少计算时间。 我设法使程序在没有数组和存储的情况下运行,现在我试图实现该功能,但遇到了麻烦。我不确定如何组织它。我已经浏览了Google并浏览了一些书,但没有太多帮助我解决如何实施解决方案的方法。 上面是不正

  • 1. 前言 本节内容是递归算法系列之一:斐波那契数列递归求解,主要介绍了斐波那契数列的定义,然后用递归的实现思想分析了一下斐波那契数列,最后给出了基于 Java 代码应用递归思想实现斐波那契数列的代码实现及简单讲解。 2. 什么是斐波那契数列? 斐波那契数列(Fibonacci sequence),也称之为黄金分割数列,由意大利数学家列昂纳多・斐波那契(Leonardo Fibonacci)提出。

  • Python3 实例 以下代码使用递归的方式来生成斐波那契数列: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com def recur_fibo(n): """递归函数 输出斐波那契数列""" if n <= 1: return n else: return(recur_fibo(n-1) + recur_fibo(n

  • 本文向大家介绍Java递归实现斐波那契数列,包括了Java递归实现斐波那契数列的使用技巧和注意事项,需要的朋友参考一下 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所