static void Main(string[] args)
        ...{
            Console.WriteLine(Process1(30));
            Console.ReadLine();        
        }
        public static int Process1(int i)
        ...{
            //计算数组{1,1,2,3,5,8.......} 第30位值
            if (i == 0) return 0;
            if (i == 1) return 1;
            else
                return Process1(i - 1) + Process1(i - 2);
        }当i=4或者i=5的时候 是个什么过程啊 ?系统是怎么走的啊? 各自的值是多少啊?

解决方案 »

  1.   

    斐波那契数列,递归调用
    int Foo(int n)
            {
                if (n <= 2)
                {
                    return 1;
                }
                else
                {
                    return Foo(n - 1) + Foo(n - 2);
                }
            }
      

  2.   

    当i=4时,return Process1(3) + Process1(2);Process1(3),Process1(2)继续调用上面同一方法Process1(1)=1;Process1(0)=0,//题目告诉我们的
    Process1(3)=return Process1(2) + Process1(1)=2;
    Process1(2)=return Process1(1) + Process1(0)=1;所以i=4时,Process1(4)=return Process1(3) + Process1(2)=2+1=3;i=5这个步骤是一样的
      

  3.   

    public static int Process1(int i)
     {
      //计算数组{1,1,2,3,5,8.......} 第30位值
      if (i == 0) return 0;
      if (i == 1) return 1;
      else
      return Process1(i - 1) + Process1(i - 2);
      }就这样
      

  4.   

    public static int Process1(int i)
     {
      //计算数组{1,1,2,3,5,8.......} 第30位值
      //if (i == 0) return 0;不可能等于0所以这句可以不要
      if (i == 1) return 1;
      else
      return Process1(i - 1) + Process1(i - 2);
      }
      

  5.   

    int s1 = 1;
    int s2 = 1;
    for(int i = 3; i<=30; i++)
    {
        int tmp = s1 + s2;
        s1 = s2;
        s2 = tmp;
    }循环结束后 s2 就是第30位的值。
      

  6.   

     Process1(4) =  Process1(3) +  Process1(2)
    求 Process1(3)和 Process1(2)
    Process1(3):
     Process1(3) =  Process1(2) +  Process1(1)
     Process1(2) =  Process1(1) +  Process1(0) = 1 + 0 = 1
     Process1(3) = 1 + 1 = 2Process1(2):
     Process1(2) =  Process1(1) +  Process1(0) = 1 + 0 = 1Process1(4) = 2 + 1 = 3
      

  7.   

    public static int Process1(int i)
     {
      //计算数组{1,1,2,3,5,8.......} 第30位值
      if (i == 0) return 0;
      if (i == 1) return 1;
      else
      return Process1(i - 1) + Process1(i - 2);
      }
      

  8.   

    用递归的话参数稍微大点就很慢了。下边一个不用递归的class Fibonacci
        {
            public static int getFibonacciNum(int i)
            {
                if(i < 0) return -1;
                if(i < 3) return 1;
                int temp = 2;
                int head = 1;
                int end = 1;
                while (temp < i)
                {
                    head += end;
                    head ^= end;
                    end ^= head;
                    head ^= end;
                    temp++;
                }
                return end;
            }
        }
      

  9.   

    要知道f(5)的值就得知道f(4)和f(3)的值,要知道f(4)的值,就得知道f(3)和f(2)的值,这样依此类推下去
      

  10.   

    这里的return Process1(i - 1) + Process1(i - 2),当Process1(i - 1)走完以后才走后面的Process1(i - 2)这个方法对吗?如果我在main方法里 Console.WriteLine(Process1(5));
    传进去的是个5,那么当Process1(i - 1)这个方法走完以后,后面的Process1(i - 2)这个方法第一次开始运行的时候i的值是多少呢、?
      

  11.   

    这里的return Process1(i - 1) + Process1(i - 2),当Process1(i - 1)走完以后才走后面的Process1(i - 2)这个方法对吗?如果我在main方法里 Console.WriteLine(Process1(5));
    传进去的是个5,那么当Process1(i - 1)这个方法走完以后,后面的Process1(i - 2)这个方法第一次开始运行的时候i的值是多少呢、?
      

  12.   

    这里的return Process1(i - 1) + Process1(i - 2),当Process1(i - 1)走完以后才走后面的Process1(i - 2)这个方法对吗?如果我在main方法里 Console.WriteLine(Process1(5));
    传进去的是个5,那么当Process1(i - 1)这个方法走完以后,后面的Process1(i - 2)这个方法第一次开始运行的时候i的值是多少呢、?
      

  13.   

    这样输出下,你可以看到具体过程了  
          public static Int32 Process1(Int32 i)
            {
                Console.WriteLine("In Process1({0})",i);
                if (i == 1 || i == 2)
                    return 1;
                else
                    return Process1(i - 1) + Process1(i - 2);
            }          static void Main(string[] args)
            {
                Process1(5);
            }
      

  14.   

    Process1(i - 1)计算完成以后开始运行Process1(i - 2)方法而 Process1(i - 2)方法第一次的i值是和当时main方法传进来的值是相同的 对吧?