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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lantian 初级黑马   /  2012-7-8 14:43  /  1851 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lantian 于 2012-7-8 20:07 编辑

public class Test {
         static int T(int x)
        {

               return x==0?0:x+T(x-1);

        }
        public static void main(String args[]) {

              System.out.print(Test.T(50));

       }


根据我自己的理解,判断后x!=0,所以打印的x应该是49啊,怎么会是1275呢,x==0?0:x+T(x-1)是什么意思?

8 个回复

倒序浏览
这应该属于递归算法。return x==0?0:x+T(x-1);这句话中的T(x-1)应该是递归调用,它调用的是它自己本身的静态方法,当给x赋值50时,根据判断,x!=0,所以将x+T(x-1)值返回,即返回50+T(49),就相当于此时x的值等于49,然后再进来运算,直到x=0为止。
其实他的性质就跟下面两个代码差不多。

                int sum=0;
                for(int x=50;x>=0;x--)
                {
                        sum=sum+x;
                }
                System.out.println(sum);

                int x=50,sum=0;
                if(x>=0)
                {
                        sum=sum+x;
                        x--;
                }
                System.out.println(sum);

其实也挺简单的,自己好好琢磨琢磨就懂了,

我也是根据自己的理解,哪位高手要是发现我说的有什么不对的地方的话,还请赐教,,谢谢喽

只要能帮到你,手累也值了。
回复 使用道具 举报
public class Test {
         static int T(int x)
        {

               return x==0?0:x+T(x-1);

        }
        public static void main(String args[]) {

              System.out.print(Test.T(50));

       }


这是个递归调用,
第1次,x是50,判断不等于0,则返回x+T(x-1),即50+T(49)。但是T(49)不是确定的值,还需要调用函数T()。
所以,Test.T(50)实际上是求50+49+48+。。。+2+1+0的和,根据求和公式,最后返回的值就是1275.
x==0?0:x+T(x-1)是什么意思?
这是三元运算符,原型是, 表达式1?表达式2:表达式3。
当表达式1的boolean值是true时,返回表达式2的值,当为false时,返回表达式3的值。
希望有帮到你~~有疑问可以再M我
回复 使用道具 举报
呵呵!谢谢。。。。。。。。。。
回复 使用道具 举报
class Test
{
         static int T(int x)
        {
               return (x==0)?0:x+T(x-1);
        }
        public static void main(String args[])
   {
              System.out.print(Test.T(50));
       }
}
你这里面构造成了循环,红色的标示出了。
一直到x=0时循环才结束。
50+49+48+........+5+4+3+2+1+0=1275
回复 使用道具 举报
public class Test {
static int T(int x)
{

return x==0?0:x+T(x-1) ; //这里 你已经运行了递归调用,T(x-1) =x+T((x-1)-1)......+0
//return x == 0? 0 : (x-1);  //这样修改结果才能是49。

}
public static void main(String args[]) {

System.out.print(Test.T(50));

}


根据我自己的理解,判断后x!=0,所以打印的x应该是49啊,怎么会是1275呢,x==0?0:x+T(x-1)是什么意思?
回复 使用道具 举报
本帖最后由 梁健生 于 2012-7-8 18:40 编辑


脑子热糊涂了,请越过 看下边的!!!

点评

int sum = 0; for(int i=1;i<51;i++) sum = sum + i; System.out.println("sum = "+sum); 建议你试试。计算失误谁都有,看来代码写多了计算能力都有下降的可能啊。   发表于 2012-7-8 15:26
回复 使用道具 举报
梁健生 发表于 2012-7-8 15:06
哥们 你理解错了~~~   1+.....+50 不可能等于1275的!!

我擦 太热了 ,脑子都乱了 !!找个角落蹲着去~~~~:'(
回复 使用道具 举报
这是个函数递归调用的问题,即:函数自己调用自己
楼主程序中计算的是T(50),为了演示方便,我是用T(3)来画个图演示函数的调用过程,如图所示
过程就是这个样子,T(50)也是一样的,只是函数调用的次数多一些
另外,递归一定要有结束的标记,如程序中的x==0,否则会出现栈溢出

1.png (15.17 KB, 下载次数: 17)

1.png

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 解释的不错,赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马