java - 调试我的递归斐波那契 Java 代码并更正逻辑
问题描述
我无法理解为什么输出错误。
我试图编写一个打印斐波那契数的递归代码,并得到了预期的输出和一个意想不到的值流。
public class FibonacciSeries {
static int limitNum = 10; //the desired number of Fibonacci values
public static void main(String[] args) {
FibonacciSeries series = new FibonacciSeries();
series.printRecursiveFibonacci(0,1,1);
}
public void printRecursiveFibonacci(int a, int b, int count)
{
while(count<=limitNum)
{
if(count==1||count==2)
{
System.out.println(count-1);
count++;
continue;
}
int k=a+b;
a=b;
b=k;
System.out.println(b);
count++;
printRecursiveFibonacci(a, b, count);
}
}
}
预期输出为 0 1 1 2 3 5 8 13 21 34
但我得到了 - 0 1 1 2 3 5 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 5 8 13 21 34 34 21 34 21 34 34 21 34 34 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 3 5 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 8 13 34 34 34 34 21 12 21 34 34 5 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 8 13 21 34 34 21 34 34 13 21 34 34 21 34 34 2 3 5 8 13 21 34 13 34 21 34 34 32 34 34 8 13 21 34 34 21 34 34 13 21 ...
解决方案
我不确定你的代码到底发生了什么,很多奇怪的事情正在发生:
while
并以相同的方法递归if
而continue
不是if/else
- 有时打印
count - 1
,有时打印b
。
我怀疑这与您的循环未按预期终止有关。一般来说,尽量坚持递归或循环。这是一个示例实现:
public static void printFibLimit(int a, int b, int count) {
if (count >= EXTERNALLY_DEFINED_LIMIT_VARIABLE) return; // if true, we're done, no more work has to be done.
// Since this is a tail-recursive function, return will terminate the function
System.out.println(a); // print our first value
printFibLimit(b, a + b, count + 1);
// a -> b
// b -> a + b
// count -> count + 1
}
推荐阅读
- webforms - 我可以在 ASP.NET 网络表单中的站点主控内有一个表单吗
- java - Java Socket 服务器在读取数据时挂起
- django - 在 Django 中使用 API 以及如何显示数据
- c# - 在没有 libusb 的情况下在 C# 中获取 USB 设备描述符?
- ssl - oauth2_proxy 不要求身份验证
- html - 如何在css中制作动态字体颜色
- javascript - 小屏幕的 HTML 高度/宽度属性覆盖
- sql - 计算其他列中 ID 的出现次数
- cassandra-3.0 - 在不提供主键的情况下查询表的最佳方式
- javascript - 如何上传 zip 多部分表单文件,将其提取并即时上传到 S3?