除输入n = 0外,该程序显示正确的输出。
catch
当我输入n = 0时,它显示以下错误:
def fib(n):
f=list()
i=0
while(i<=n):
f.append(i)
i+=1
f[0]=0
f[1]=1
for i in range(2,n+1):
f[i]=f[i-1]+f[i-2]
i+=1
return f[n]
n=int(input())
print(fib(n))
答案 0 :(得分:1)
由于在while循环期间初始化这些元素,因此中间不需要两行。错误来自于describe("A user gets registered", function () {
it('should create a SINGLE user on /api/register POST', function (done) {
//calling REGISTER api
server
.post('/api/register')
.send({
name: "John Doe",
username: "john",
password: "open"
})
.expect("Content-type", /json/)
.expect(200)
.end(function (err, res) {
var data = {
"name": "John Doe"
};
res.status.should.equal(200);
res.body.should.equal(data);
done();
});
});
});
,你只是在列表中添加了一个元素。之后,改变第一和第二元素的价值。没有第二个元素。
router.post('/', function (req, res) {
var data = {name: 'John Doe'};
res.status(200).json(data);
});
module.exports = router;
答案 1 :(得分:0)
要么鸭子输入它:
def fib(n):
if n in [0, 1]:
return n
.
.
或者分别将f[0] = 0
和f[1] = 1
更改为f.append(0)
和f.append(1)
。
答案 2 :(得分:0)
你不需要这两行。
f[0]=0
f[1]=1
删除它们,一切都会有效。
答案 3 :(得分:0)
对代码的更正:
def fib(n):
f=list()
i=0
while(i<=n):
f.append(i)
i+=1
# HERE WAS THE MISTAKE
f.append(0)
f.append(1)
for i in range(2,n+1):
f[i]=f[i-1]+f[i-2]
i+=1
return f[n]
输出:
>>> fib(0)
0
>>> fib(1)
1
>>> fib(2)
1
>>> fib(3)
2
>>> fib(4)
3
>>> fib(5)
5
>>> fib(6)
8
>>> fib(7)
13
>>> fib(8)
21
>>> fib(9)
34
...
>>> fib(30)
832040
答案 4 :(得分:0)
代码中的问题是循环没有创建索引为1的项,因此在循环之后您可以更改此项,因为它不存在。 我会建议&#34;硬编码&#34;开始时为0和1,然后使用递归来定义fibonacci函数
def fib(n):
if 0<=n<2: return n
else: return fib(n-2)+fib(n-1)
然后只需致电
fib(i)
使用列表理解获取第i个项目或列出所有x斐波那契值
[fib(i) for i in range(x)]