我有这个代码:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { }
int Fibonacci(int nNumber) {
if (nNumber == 0)
return 0;
if (nNumber == 1)
return 1;
return Fibonacci(nNumber-1) + Fibonacci(nNumber-2);
}
void __fastcall TForm1::Button1Click(TObject *Sender) {
int k=0;
int val;
k = StrToInt(Edit1->Text);
for (int i=0; i < k; i++) {
val = Fibonacci(i);
Form1->ListBox1->Items->Add("F"+IntToStr(i)+"-->"+IntToStr(val));
}
}
我如何创建 2 个线程来分别计算和打印斐波那契数列的偶数和奇数索引数?
这是 Builder 6 中的练习。
最佳答案
您可以使用仅使用偶数或奇数元素的斐波那契数列公式。要开发此公式:
f(n) = f(n-1) + f(n-2) [1]
f(n-1) = f(n-2) + f(n-3) [2]
f(n-2) = f(n-3) + f(n-4) [3]
Combining [1] and [2]:
f(n) = 2 * f(n-2) + f(n-3) [4]
Rearranging [3]:
f(n-3) = f(n-2) - f(n-4) [5]
Combining [4] and [5]:
f(n) = 3 * f(n-2) - f(n-4) [6]
现在每个线程都可以使用 [6] 计算偶数或奇数斐波那契数,而无需等待其他线程的结果。
int Fibonacci(int nNumber) {
switch (nNumber)
{
case 0: return 0;
case 1: return 1;
case 2: return 1;
case 3: return 2;
default: return 3 * Fibonacci(nNumber-2) - Fibonacci(nNumber-4);
}
}
但是,这可能会破坏您的练习,使事情比预期的简单得多。
关于c++ - 使用两个线程计算斐波那契数列。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17573076/