public class Jiafa
{
  
 public static void main(String[] args) {
 
 for(int i=1;i<=7;i++){
 System.out.print(f(i)+" ");
 }
 
 } public static int f(int n) {
 if (n == 1 || n == 2) {
 return 1;
 }
  else {
 return f(n - 1) + f(n - 2);
 }
 }
 }
输出结果:1 1 2 3 5 8 13
这是一道java逻辑运算题!!
我想问下这个递归是如何想到的,当我看到这道题的时候没有思路,思路是从哪点推出来的,虽然我看见代码知道如何来运行,但是始终想不出来为什么这道题会这样作出来!!

解决方案 »

  1.   

    程序的运行过程我是了解,就是不知道如何推敲出来的,尤其是递归f(n-1)+f(n-2)为什么要这么做!!我想做每件事情肯定是有原因的!其中的规律我也知道,除了前2位,第3位开始,都是前2位相加起来得出第3位的,依次如下
      

  2.   

    java 方法实现 public class TestFib { public static void main(String[] args){ 
         TestFib tf = new TestFib(); 
         tf.fibs(); 
       } 
      public void fibs(){ 
      int fib1=1,fib2=1,fib3 = 0; 
        for(int  i  =  3;  i <=7;  i++)  
        {  
            fib3 = fib2 + fib1; 
            fib1 = fib2; 
            fib2 = fib3; 
       }  
        System.out.println("count"+fib3); 
     } 给你一段没有用递归的实现方法,我觉得先理解不用递归的方法再去设计递归会更容易一些} 
      

  3.   

    我知道楼主一定是对为什么会想到递归这种方法感到疑惑是吧
    其实递归必须得满足一定的条件的
    如求n的阶乘
    f(n)=n!

    n!=n*(n-1)!
    1!=1故有
    f(n)=n*f(n-1)
    f(1)=1于是递归就行成了
      

  4.   

    要知道f(n)的值,前提条件是知道f(n-1)、f(n-2),以此类推到已知的值。  这样需求导致想到递归的方法解决!呵呵 前提是你对递归算法很熟悉,否则怎么想到!good luck!
      

  5.   

    从f(7)往回推f(6)、f(5),再往回推,……一直到f(2)、f(1);因为f(2)=1、f(1)=1是确定的,然后再利用f(1)、f(2)计算出f(3),依此类推计算出f(7)的。
      

  6.   

    你首先研究这个数列,它的规律是:除了1以外其它每一个数等于它的相邻前两个数之和,要想得到后一个数就必须保留前两个数,为此就想到了static
      

  7.   

    这就好像是一个数学题吗
    有一个函数f(x)=f(x-1)+f(x-2),x>2(x为整数),已知f(1)=1,f(2)=1,求前八个函数值用编程实现就是上面的程序了