Tag: 斐波那契

与C的Fibonacci序列相比,为什么Haskell这么慢?

我只是Haskell的初学者。 我编写了一个代码来显示Fibonacci序列中的N个数字。 这是我在Haskell中的代码, fib_seq 1 = 1:[] fib_seq 2 = 1:1:[] fib_seq n = sum(take 2 (fib_seq (n-1))):fib_seq (n-1) 当我在GHCI中为更高的数字运行此代码(例如fib_seq 40时,需要很长时间来评估它并且我的计算机挂起并且我必须中断。 但是,当我在C中写出相同的逻辑时,(我只是打印而不是将其保存在列表中), #include int fib_seq (int n){ if(n==1) return 1; else if(n==2) return 1; else return fib_seq(n-1)+fib_seq(n-2); } void print_fib(int n){ if(n==0) return; else printf(“%i “, fib_seq(n)); print_fib(n-1); } int main(int argn, char* argc){ print_fib(40); […]

递归和斐波那契序列

如何使用此代码打印给定术语的斐波那契序列的所有值? 现在它只打印最后一个术语 #include int fibonacci(int n){ if (n==2) return 1; else return fibonacci(n-1) + fibonacci(n-2); } int main() { int n; int answer; printf(“Enter the number of terms you’d like in the sequence\n”); scanf(“%d”,&n); answer = fibonacci(n); printf(“The answer is %d\n”, answer); }

使用Fork的递归Fibonacci(在C中)

我正在尝试编写一个函数,该函数使用C中的forks从给定的int n递归计算得到的fibonacci数。 这是function规范:如果print为true,则打印它。 否则,将其提供给父进程。 解决方案应该是递归的,它必须为每个调用分叉一个新的子节点。 每个进程应该只调用一次doFib()。 方法签名无法更改。 无法使用辅助函数。 这是我到目前为止根据我对fork的理解所写的内容。 我试图分叉两次,所以我可以产生两个子进程。 一个做fib(n-1),一个做fib(n-2)。 这样我就可以抓住两个结果并将它们组合起来。 static void doFib(int n, int doPrint) { pid_t pid1; pid_t retpid1; int status1; pid_t pid2; pid_t retpid2; int status2; pid = fork(); if (pid == 0) // Child Process 1 { exit(100); // sends 100 to the parent } else if (pid > […]

在fib(47)之后,迭代Fibonacci算法给出了错误的结果

我正在使用我在下面复制的迭代fib算法。 我在Rosetta代码上找到了这个算法,它给了我正确的答案直到fib(46)。 之后它的价值观是错误的。 有谁知道为什么会这样? long long fibb(int n) { int fnow = 0, fnext = 1, tempf; while(–n > 0) { tempf = fnow + fnext; fnow = fnext; fnext = tempf; } return fnext; } 输出: Fib(46) = 1836311903 <—- Correct Fib(47) = 18446744092385799393 <—- Wrong (Correct Answer is: 2971215073)

在C中递归计算Fibonacci数

我正在尝试通过编写一个简单的程序来输出Fibonacci数来学习C. 它不起作用。 fibonacci.h unsigned int fibonacci_recursive(unsigned int n); fibonacci.c #include #include “fibonacci.h” main() { unsigned int i; for (i = 0; i < 10; i++) { printf("%d\t%n", fibonacci_recursive(i)); } getchar(); } fibonacci_recursive.c unsigned int fib_rec(unsigned int n); main(unsigned int n) { return fib_rec(n); } unsigned int fib_rec(unsigned int n) { if (n == 0) { […]