读书人

递归的有关问题

发布时间: 2012-02-04 15:43:09 作者: rapoo

递归的问题
参考书有如下关于递归的问题:
有一个数列: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)

读书人网 >Java相关

热点推荐