java - 当我输入负数时,斐波那契数列“nth term finder”似乎不起作用
问题描述
所以我想做的是向用户询问一个数字并找出它的斐波那契术语是什么。到目前为止,如果输入了一个整数 0 <=,那么它会返回正确的斐波那契项。但是当我尝试使用负数时,我得到了一个错误。
代码:
public int fib(int n) {
if (n == 0 || n == 1 || n == -1) {
// if n is 1, 0 or -1
return Math.abs(n);
} else if (n < 0) {
// if n is negative
return (-1)^(n + 1) * fib(n);
} else {
// if n is positive
return fib(n - 1) + fib(n - 2);
}
}
错误:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
at Fibonacci.fib(Fibonacci.java:133)
解决方案
您的代码有几处有问题。首先,^
不是求幂,而是按位异或。相反,您必须使用Math.pow
. 此外,fib(n)
当您应该调用时,您调用fib(-n)
(以便获得正指数的斐波那契数):
return ((int) Math.pow(-1, n + 1)) * fib(-n);
推荐阅读
- json.net - 更正与 Json.Net 一起使用的无效 json
- node.js - dynamo db local shell 不使用 docker 镜像列出表
- dictionary - Haskell映射但删除不符合条件的项目
- python - 为什么我会收到此错误?期望一个缩进块(
,第 106 行)pylint(语法错误) - c++ - 为什么 stringstream 停止接收字符串?[C++]
- python - 如何从条件for循环将数字附加到空数据框列
- sql-server - 为什么我的 SQL Server 2017 查询返回不正确的结果?
- laravel - Laravel 可以正常使用 find 但添加分页后无法正常工作
- google-iap - 错误删除了oAuth客户端ID,如何重新启用IAP
- java - 将新对象添加到作为另一个类的属性的 ArrayList