A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yaowenjiang 黑马帝   /  2011-11-11 09:21  /  2339 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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)   写错了
}
}

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 你想问的是递归吧?

查看全部评分

7 个回复

倒序浏览
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)这个语句,并把运算结果返回

}

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有奖!

查看全部评分

回复 使用道具 举报
路新 黑马帝 2011-11-12 10:05:54
藤椅
//原代码
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


评分

参与人数 1技术分 +2 收起 理由
宁超 + 2 有图,很认真。

查看全部评分

回复 使用道具 举报
这是递归,重复调用自己
回复 使用道具 举报
想起来高中的时候老师解这样的方程题f(x) = xxxx.....很像,
回复 使用道具 举报
这个循环结果是  1,1,2,3,5,8,13,21
前面当x=1或2  结果都是1    然后从3开始执行  f(3-1)+f(3-2)   那接着两个1 以后跟着应该是3了啊   可算出的结果怎么是2啊

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
张翼 黑马帝 2011-11-12 19:24:09
7#
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:29
8#
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语句的有关原理看一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马