最近我一直在寻找递归形式的数字(用户输入,正整数)的斐波那契和,例如(输出是): 9 = 8 + 1 14 = 13 + 1 30 = 21 + 8 + 1 等等。 到目前为止,我已经做了递归函数来计算实际的斐波那契数(在9总和,如8和1),它看起来像这样:斐波那契Sum in(Java)
static long[] f = new long[50];
static long fib(int n) {
if (n <= 1) { //base case
return 1;
}
if (n < f.length) {
if (f[n] != 0) {
return f[n];
}
return f[n] = fib(n - 1) + fib(n - 2);
}
return fib(n - 1) + fib(n - 2);
}
我分配给我这是一个暗示:
提示: 重新定理为 n = fj +(n - fj) 这提示了一个递归解决方案。
,并用这一点,我已经目前想出这个:
static void fibSum(int n)
{
System.out.print(n + " = ");
for(int i = 0; i >= 0 ; i++)
{
if(n - (fib(i)) == 0)
{
System.out.println(fib(i));
}
else if(n < (fib(i)) && n > (fib(i-1)))
{
System.out.println(fib(i-1) + " + ");
}
}
}
我的输出变为尽可能[进入例如,9作为用户输入]“9 = 8 +”,和与该对于所有正在阅读这些内容的人(并且感谢你获得这么多!),我的问题是为什么我没有得到分解总和中的最后一个数字(1),并且我的解决方案被认为是recurisve,因为它实际上并没有遵循我在过去的例子中看到的格式,也没有遵循我写的fib()方法。我不知道如何实现通过这种格式打印加号。 这里是我的参考主要方法:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Please enter an integer number: ");
int n = scan.nextInt();
fibSum(n);
我认为由于fib函数的基础case n <= 1,它处理诸如fib(-1)之类的情况并将其返回为1?也许我错了,目前正试图通过你提到的事来尝试找到并修复它们。 – Dan