黑马程序员技术交流社区

标题: 求帮忙解释一下这段代码最后几句的含义 [打印本页]

作者: yaowenjiang    时间: 2011-11-11 09:21
标题: 求帮忙解释一下这段代码最后几句的含义
本帖最后由 yaowenjiang 于 2011-11-12 18:40 编辑

public class exp2
{
        public static void main (String [] args)
        {
                int i=0;
                for (int i=1;i<20;i++)
                System.out.println(f(i));
        }
        public static int f(int(x))
        {
                if(x==1 || x==2)    //
                return 1;     //
                else
                return f(x-1)+f(x-2);    //   这里之前写成f(x-1)+f(x+2)   写错了
}
}

作者: 王新春    时间: 2011-11-11 19:13
public static int f(int(x))
        {
                if(x==1 || x==2)    //这是一个条件控制语句,当x==1或者x==2时
                return 1;     //上面的x条件符合时,返回值1
                else
                return f(x-1)+f(x+2);    //当x不符合x==1或者x==2时则执行f(x-1)+f(x+2)这个语句,并把运算结果返回

}

作者: 路新    时间: 2011-11-12 10:05
//原代码
public class exp2
{
        public static void main (String [] args)
        {
                int i=0;//重复定义i的值   错误1                for (int i=1;i<20;i++)
                System.out.println(f(i));
        }
        public static int f(int(x))//方法定义的参数格式错误 f(int x) 错误2
        {
                if(x==1 || x==2)    //
        return 1;     //没有缩进该行  缩进可增强代码的可读性
         else
        return f(x-1)+f(x+2); //这个递归是不可能算出值得 只能不断的循环
        }
}
/*
f(1) = 1
f(2) = 1
f(3) = f(3-1) + f(3+2) = f(2)+f(5)=1+f(5)
f(4) = f(4-1) + f(4+2) = f(3)+f(6)=1+f(5)+f(6)
f(5) = f(5-1) + f(5+2) = f(4)+f(7)=1+f(5)+f(6)+f(7)
.......
f(n) = 1+f(5)+f(6)+f(7)+..+f(n+2)//n>5



作者: 史晓霞    时间: 2011-11-12 10:20
这是递归,重复调用自己
作者: 张志东    时间: 2011-11-12 11:30
想起来高中的时候老师解这样的方程题f(x) = xxxx.....很像,
作者: yaowenjiang    时间: 2011-11-12 18:38
这个循环结果是  1,1,2,3,5,8,13,21
前面当x=1或2  结果都是1    然后从3开始执行  f(3-1)+f(3-2)   那接着两个1 以后跟着应该是3了啊   可算出的结果怎么是2啊
作者: 张翼    时间: 2011-11-12 19:24
blic static int f(int(x))
        {
                if(x==1 || x==2)    //这是一个条件控制语句,当x==1或者x==2时
                return 1;     //上面的x条件符合时,返回值1
                else
                return f(x-1)+f(x-2);    //当x不符合x==1或者x==2时则执行f(x-1)+f(x+2)这个语句,并把运算结果返回
for循环执行十九次,每执行一次就调用一下f(),当x是一或者二的时候返回1,但是当X不是这两个数的时候就把X带入f(x-1)+f(x+2),就相当于再度调用f方法,因为无论参数多大,最后总会被减成一或者二,所以执行过程大致如此:
   1,1
   2,1
   3,f(2)+f(1)=1+1=2
   4,f(3)+f(2)=f(2)+f(1)+f(2)=1+1+1=3
   5,................ 依次类推。
作者: 咖啡    时间: 2011-11-12 19:59
public static int f(int (x)){
  if(x==1|| x==2)      //当x等于1或者等于2的时候就返回1,否则就返回 return f(x-1)+f(x-2);

     return 1;
    else
     return f(x-1)+f(x-2);
}    你应该把if语句的有关原理看一下。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2