刚刚开始重新学习Haskell(在大学做过,但忘了大部分)并且认为我会实现一个斐波那契函数来开始.但是,我不断得到一个stackoverflow,即使是非常小的n.
有人能发现我的功能有什么问题吗?
fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n+1)
Run Code Online (Sandbox Code Playgroud) 当我运行它并输入一个数字时,它只是不停地重复它.例如,如果我放3,它会做3 3 3 3 3但不停止
int main()
{
int current=0, prev=1, prev2=1, fibnum;
cout << "Enter the number of Fibonacci numbers to compute: ";
cin >> fibnum;
if (fibnum <=0)
{
cout << "Error: Enter a positive number: ";
}
while (fibnum > 0){
current = prev + prev2;
prev = prev2;
prev2 = current;
current++;
cout << "," << fibnum;
cout << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 这是来自项目Euler,问题2.我写了下面看似无辜的代码:
public class FibonacciEven {
public static void main(String[] stuff) {
long sum = 0;
int i = 0;
while(fib(i) <= 40) {
boolean even = fib(i) % 2 == 0;
if(even) {
sum += fib(i);
}
else {
continue;
}
i++;
}
System.out.println(sum);
}
public static long fib(int n) {
long prev1 = 0;
long prev2 = 1;
for(int i = 0; i < n; i++) {
long savePrev1 = prev1;
prev1 = prev2;
prev2 = savePrev1 + prev2; …Run Code Online (Sandbox Code Playgroud) 我仍然是C++的新手,并决定制作斐波那契序列.它起作用了(哇!)但它不能像我想的那样好用.
我的意思是说,例如我告诉我的程序计算我将获得的序列的前10个术语
"0,1,1",然后我必须按下每个附加数字的输入,直到它达到10,在这种情况下程序返回0并结束.
我如何让程序显示我想要的所有数字,而无需每增加一个输入?
这是我的脚本:
#include <iostream>
using namespace std;
int main()
{
int FibNum;
cout << "How many numbers of the Fibonacci Sequence would you like to see? \n\n";
cin>> FibNum;
cin.ignore();
int a = 0;
int b = 1;
int c = 2;
cout << "Fibonacci Sequence up to " << FibNum << " terms.\n\n";
cout << a << "\n" << b << "\n";
for (int c = 2; c < FibNum; c++) {
int d = a …Run Code Online (Sandbox Code Playgroud) 我设计了这个程序,可以打印斐波那契系列(series[i] = series[i-1] + series[i-2])但我不能得到超过47个数字,因为第48个它们变成负数和奇数(我认为这发生在列表超出范围或项目为空时):
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
int length;
string again = "";
do {
cout << "Enter the length you want in your sequence: ";
cin >> length;
vector<int> series(length);
for (int n=0; n<=1; n++) series[n] = n;
for (int number=2; number<=length; number++) {
series[number] = series[number-1] + series[number-2];
}
for (int i=0; i<length; i++) cout << series[i] << " ";
cout << endl << "Do it again …Run Code Online (Sandbox Code Playgroud) 我在MIPS中递归处理堆栈时遇到麻烦。我明白了,但是我的程序没有按照我的意思做出反应。
我的目标是将用户输入作为n并在n处打印斐波那契数。到目前为止,我所拥有的如下。
(我很确定问题出在fib函数中数字的实际计算中。)谢谢您的帮助!:)
.text
main:
# Prompt user to input non-negative number
la $a0,prompt
li $v0,4
syscall
li $v0,5
syscall
move $t2,$v0
# Call function to get fibonnacci #n
move $a0,$t2
move $v0,$t2
jal fib
move $t3,$v0
# Output message and n
la $a0,result
li $v0,4
syscall
move $a0,$t2
li $v0,1
syscall
la $a0,result2
li $v0,4
syscall
move $a0,$t3
li $v0,1
syscall
la $a0,endl
li $v0,4
syscall
# End program
li $v0,10
syscall
fib:
# Compute and return fibonacci number …Run Code Online (Sandbox Code Playgroud) 我使用recursion.But为show fibonacci系列编写此代码.对于n> 43,它没有正确显示(例如:对于n = 100显示:-980107325).
#include<stdio.h>
#include<conio.h>
void fibonacciSeries(int);
void fibonacciSeries(int n)
{
static long d = 0, e = 1;
long c;
if (n>1)
{
c = d + e;
d = e;
e = c;
printf("%d \n", c);
fibonacciSeries(n - 1);
}
}
int main()
{
long a, n;
long long i = 0, j = 1, f;
printf("How many number you want to print in the fibonnaci series :\n");
scanf("%d", &n);
printf("\nFibonacci Series: ");
printf("%d", 0);
fibonacciSeries(n); …Run Code Online (Sandbox Code Playgroud) 我试图代码的线性递归三重斐波那契(意味着三重斐波那契数由斐波那契数启发但具有三个预定值开始,每个值之后作为前述三个值的总和.)
其中一个约束基本上是使它尾递归,但到目前为止我没有任何机会使用这段代码:
public class TailRecursiveOddonacci {
public long tailOddonacci(int n) {
if (n <= 3) {
return 1;
}
return tailOddonacciRecursion(0, 1, 2, n);
}
private long tailOddonacciRecursion(int a, int b, int c, int count) {
if(count <= 0) {
return a;
}
return tailOddonacciRecursion(b, a+b, a+b+c, count-1);
}
}
Run Code Online (Sandbox Code Playgroud)
我很难找到它为什么不起作用......
编辑:在这种情况下,n是一个非负整数.因此,例如,10应该返回105,或者5应该返回5.
我是Rust的新手,但作为Haskell的粉丝,我非常感谢matchRust的工作方式.现在我面临着一个罕见的情况,我确实需要堕落 - 从某种意义上说,我希望所有匹配的几个重叠的案例都能被执行.这有效:
fn options(stairs: i32) -> i32 {
if stairs == 0 {
return 1;
}
let mut count: i32 = 0;
if stairs >= 1 {
count += options(stairs - 1);
}
if stairs >= 2 {
count += options(stairs - 2);
}
if stairs >= 3 {
count += options(stairs - 3);
}
count
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这是否是Rust中的惯用语或是否有更好的方法.
编辑:上下文是Cracking the Coding Interview的一个问题:"一个孩子正在爬楼梯,有n个步骤,可以一步跳1步,2步或3步.实施一种方法来计算孩子爬楼梯的可能方式."
我在Haskell中编写了下面的函数,我不太清楚为什么它不适用于懒惰的评估.
infFib :: [Integer]
infFib = infFib' []
where
infFib' [] = infFib' [0,1]
infFib' (xs) = infFib' (xs ++ [(foldr (\a b -> a+b) 0 (take 2 (reverse xs)))])
Run Code Online (Sandbox Code Playgroud)