日期:2014-05-20  浏览次数:20715 次

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