我试着编写一个简单的python函数,它应该返回一些指定最大值的fib数列表.但是我收到了这个错误.我似乎无法找出我做错了什么.
def fib(a,b,n):
f = a+b
if (f > n):
return []
return [f].extend(fib(b,f,n))
>>>fib(0,1,10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lvl2.py", line 35, in fib
return [f].extend(fib(b,f,n))
File "lvl2.py", line 35, in fib
return [f].extend(fib(b,f,n))
File "lvl2.py", line 35, in fib
return [f].extend(fib(b,f,n))
File "lvl2.py", line 35, in fib
return [f].extend(fib(b,f,n))
TypeError: 'NoneType' object is not iterable
Run Code Online (Sandbox Code Playgroud) 可能重复:
偶数斐波纳契数的总和
目前,我正在做一些Project Euler问题,我遇到了第二个问题.
通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和.
我在C++中正在解决这个问题,我认为我的代码完全正常,因为在某一点上,一切都是正确的,但随后,一切都在失控......代码:
#include <iostream>
using namespace::std;
int main() {
int a = 1;
int b = 1;
int evsum = 0;
while (a < 4000000 and b < 4000000) {
a = a + b;
b = a + b;
if (a % 2 == 0)
evsum += evsum + a;
if (b % 2 == 0)
evsum = evsum + b;
cout << a << endl;
cout << b << endl;
cout << evsum << …Run Code Online (Sandbox Code Playgroud) 请查看以下代码
package Euler;
import java.util.ArrayList;
import java.util.List;
public class Problem2
{
public static void main(String[]args)
{
int firstNumber=1;
int secondNumber=2;
int thirdNumber = 0;
int sum = 0;
List array = new ArrayList();
while(true)
{
if(thirdNumber>=400000)
{
break;
}
else
{
thirdNumber = firstNumber+secondNumber;
System.out.println(thirdNumber);
if(thirdNumber%2==0)
{
array.add(thirdNumber);
}
firstNumber = secondNumber;
secondNumber = thirdNumber;
}
}
for( int i=0;i<array.size();i++)
{
int num = Integer.parseInt(array.get(i).toString());
sum = sum+num;
}
System.out.println("The Sum is: "+sum);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我试图从Project Euler 解决这个问题,无论如何这是问题所在. …
我不确定这是否是正确的问题,但我已经遇到了代码问题.我试图找到第9个斐波纳契数,这是一个素数,但我遇到了问题.首先,检查数字是否为Prime的函数返回单个数字素数(2,3,5,7)的无.接下来,我认为我正在寻找的值是514229,如此处所示,但我的程序显示给出的值为17711,因为第9个Fibonacci素数不正确.我的代码发布在下面:
def isPrime(n):
n = abs(int(n))
if n < 2:
return False
elif n == 2:
return True
elif not n & 1:
return False
else:
for x in range(3, n/2):
if n % x == 0:
return False
return True
def chkFibonacci():
num1 = 1
num2 = 1
mySum = 0
ctr = 0
choice = 'n'
while (choice != 'y'):
mySum = num1+num2
#print mySum
if (isPrime(mySum)== True):
ctr = ctr + 1
print mySum
if …Run Code Online (Sandbox Code Playgroud) 所以我最近一直在研究Euler项目的问题,而且一切都相当顺利.直到我击中#25:
"Fibonacci序列中包含1000个数字的第一项是什么?"
我制作的节目(以下):
def main():
x = 0
y = 1
z = 0
while len(str(z)) != 1000:
z = x + y
x = y
y = z
print z
main()
Run Code Online (Sandbox Code Playgroud)
应该给我正确答案,但我只能得到:"
1070066266382758936764980584457396885083683896632151665013235203375314520604694040621889147582489792657804694888177591957484336466672569959512996030461262748092482186144069433051234774442750273781753087579391666192149259186759553966422837148943113074699503439547001985432609723067290192870526447243726117715821825548491120525013201478612965931381792235559657452039506137551467837543229119602129934048260706175397706847068202895486902666185435124521900369480641357447470911707619766945691070098024393439617474103736912503231365532164773697023167755051595173518460579954919410967778373229665796581646513903488154256310184224190259846088000110186255550245493937113651657039447629584714548523425950428582425306083544435428212611008992863795048006894330309773217834864543113205765659868456288616808718693835297350643986297640660000723562917905207051164077614812491885830945940566688339109350944456576357666151619317753792891661581327159616877487983821820492520348473874384736771934512787029218636250627816
"
这是错误的答案.所以我正在使用斐波那契序列来生成错误的1000位数字,如何...任何人都可以帮我修复它吗?我几乎没有想法.
是否存在非递归方式,我可以通过添加最后3个数字来制作"斐波那契"序列?
这是我尝试这样做的递归方式.
def fib3(n):
if n < 3:
return 1
else:
return fib3(n-1) + fib3(n-2) + fib3(n-3)
Run Code Online (Sandbox Code Playgroud)
回报 1+1+1+3+5+9+17...+(n-1) + (n-2) + (n-3)
任何帮助将不胜感激.
提前致谢
我正在学习haskell,我有以下代码:
fib a b =
a : fib b (a + b)
findFibSum =
sum [x | x <- fib 1 2, mod x 2 == 0 && x < 100]
Run Code Online (Sandbox Code Playgroud)
如果我findFibSum没有发生任何事情,它只是坐在那里.不fib应该评估并返回每个项目?我猜这与懒惰评估有关.
如果我先拨打电话take,请findFibSum接受以下列表:
findFibSum $ take 100 $ fib 1 2
Run Code Online (Sandbox Code Playgroud)
它起作用了.如何制作它以便我可以检索并检查每个项目?我可以通过批量使用来逃避,take但我想首先理解这一点.
UPDATE
感谢@amalloy我终于得到了它:
findFibSum xs =
sum [x | x <- takeWhile (<4000000) xs, mod x 2 == 0]
Run Code Online (Sandbox Code Playgroud)
takeWhile 确保它一旦达到> = 4m就停止从fib中检索值.
这是一个带缓存的简单递归方法,因此不会一遍又一遍地重新计算数字.我肯定看到它有效,但现在它被打破并打印出垃圾.我已经尝试恢复工作版本,但是找不到任何可能会破坏它的差异.
它为什么停止工作?
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int Fibonacci_vector(int n) {
static vector<int> cache(2, 1);
cache.reserve(n);
if (cache[n] == 0) {
cache[n] = Fibonacci_vector(n-1) + Fibonacci_vector(n-2);
}
return cache[n];
}
int main() {
cout << Fibonacci_vector(4);
}
Run Code Online (Sandbox Code Playgroud)
更新 Jeez,我是如此愚蠢,只是伤害.我已经改变了if (n > cache.size()) { cache.resize(n); }对cache.reserve(n);和当然它打破了一切!伙计们,对不起我的愚蠢.
正如您在下面的示例中所看到的,javascript/node比haskell快得多.
但是haskell是基于C编译的.在这个例子中,你看到C是最快的.为什么haskell比较慢?
function fib(n) {
if ( n==0 || n==1 )
return 1;
return fib(n-2)+fib(n-1);
}
console.log(fib(30));
Run Code Online (Sandbox Code Playgroud)
$ time node fib.js
1346269
real 0m0,045s
user 0m0,040s
sys 0m0,004s
fib 0 = 1
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
main = print (fib 30)
Run Code Online (Sandbox Code Playgroud)
$ ghc -o fibh fib.hs
$ time ./fibh
1346269
real 0m0,178s
user 0m0,168s
sys 0m0,000s
#include <stdio.h>
int fib(int n) {
if (n == 0 || n == …Run Code Online (Sandbox Code Playgroud) 我一直在尝试在线性时间内实现斐波那契数列。每次运行程序时,我总是得到奇怪的结果。我是C ++的新手。
int fib1(int n) {
int arr[n];
arr[0] = 0;
arr[1] = 1;
for (int i = 2; i < n; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
return arr[n];
}
int main() {
int x = fib1(3);
cout << x << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
预期的结果是:2
我得到的结果是:4199748
我在哪里弄糟?
fibonacci ×10
python ×4
c++ ×3
math ×3
haskell ×2
arraylist ×1
c ×1
caching ×1
iterator ×1
java ×1
javascript ×1
performance ×1
python-3.x ×1
recursion ×1
vector ×1