递归的问题
参考书有如下关于递归的问题:
有一个数列:f(0)=1; f(1)=4; f(n+2)=2*f(n+1)+f(n); 其中n是大于0地整数,求f(10)的值。
答案如下:
public class Recursive
{
public static int fn(int n)
{
if (n==0)
{
return 1;
}
else if (n==1)
{
return 4;
}
else
{
return 2*fn(n-1) + fn(n-2);
}
}
public static void main(String[] args)
{
System.out.println(fn(10);
}
}
我不明白的是最后的else为什么是 return 2*fn(n-1) + fn(n-2) , 而不是fn(n+2)-2*fn(n+1)呢 ?
因为我的理解是这样的,因为f(n+2)=2*f(n+1)+f(n); f(n)=f(n+2)-2*f(n+1);
哪位可以解释一下呢?
------解决方案--------------------递归要利用小参数的结果来求出自己的结果。
你用fn(n+2)和fn(n+1),你觉得这个值能算得出来么。
------解决方案--------------------f(n+2)=2*f(n+1)+f(n);
f(n)=2*f(n-1)+f(n-2);
这两不是同一函数吗;有什么疑问
------解决方案--------------------这种事情把自己当电脑执行这段代码就知道了:
main -> fn(10);
fn(10) -> else; { return fn(10+2)-2*fn(10+1) } // 根据顺序先执行fn(10+2)
fn(12) -> else; { return fn(12+2)-2*fn(12+1) } // 根据顺序先执行fn(12+2)
fn(14) -> else; { return fn(14+2)-2*fn(14+1) } // 根据顺序先执行fn(14+2)
......
你估计是你想要的结果么?
------解决方案--------------------f(n+2)=2*f(n+1)+f(n);
f(n+2 -2) = 2*f(n+1 -2) + f(n -2)
-->f(n) = 2*f(n-1) + f(n -2)
即求出f(n)的值了
------解决方案--------------------有一个数列:f(0)=1; f(1)=4; f(n+2)=2*f(n+1)+f(n); 其中n是大于0地整数,求f(10)的值。
告诉你 规律 ,你自己求 ,
f(0) = 1 ;
f(1) = 4 ;
f(n+2) = 2*f(n+1) + f(n) ; ---> f(n) = 2* f(n+1 -2) + f(n -2) --> f(n) = 2*f(n-1) + f(n -2)