F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*),相信大家还记得,现在是F0=a,F1=b,其中a的值和fn的值是已经知道,求:b。
这题其实相当的简单,我们都知道
F(2) = F(1)+F(0) = a+b;
F(3) = F(2)+F(1) = 2a+b;
F(4) = F(3)+F(2) = 3a+2b;
其实F(n)的值是与a,b是有关系的。因为F(n)的值是已经知道的了,a的值是已经知道的,如果我们能知道F(n)时,a的系数和b的系数,我们就可以求出b。
现在假想一下:
当a = 0, b = 1时,我们求出的F(n)的值 是不是 就是b的系数。
当a = 1,b = 0时,我们求出的F(n)的值 是不是 就是a的系数。
public class FnTest {
/**
* @param args
*/
public static void main(String[] args) {
int fn = 3;
int n = 4;
int AX = fun(0,1,n);
System.out.println("AX = " + AX);
int BX = fun(1,0,n);
System.out.println("BX = " + BX);
int a = 0;
int b = (fn-a*AX)/BX;
System.out.println("b = " + b);
}
static int fun(int a,int b,int n)
{
if(n==0)
{
return a;
}
else if(n==1)
{
return b;
}
else
{
return fun(a,b,n-2)+fun(a,b,n-1);
}
}
}
用递归算法计算了一下,原来在fun()中传参数刚好和之前假想的相反,我也不是好清楚,不过就是这样计算的。