首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

递归的有关问题

2012-02-04 
递归的问题参考书有如下关于递归的问题:有一个数列:f(0)1 f(1)4 f(n+2)2*f(n+1)+f(n) 其中n是大于0

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

热点排行