免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1275 | 回复: 2
打印 上一主题 下一主题

请各位给俺看看这道java道; [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-08 22:39 |只看该作者 |倒序浏览
public class PowerCalc
{
  public static void main(String[] args)
  {
    double x = 5.0;
    System.out.println(x + " to the power 4 is " + power(x,4));
    System.out.println("7.5 to the power 5 is " + power(7.5,5));
    System.out.println("7.5 to the power 0 is " + power(7.5,0));
    System.out.println("10 to the power -2 is " + power(10,-2));
  }

  // Raise x to the power n
  static double power(double x, int n)
  {
    if(n > 1)
      return x*power(x, n-1);    // Recursive call
    else if(n < 0)
      return 1.0/power(x, -n);   // Negative power of x
    else
      return n == 0 ? 1.0 : x;   // When n is 0 return 1, otherwise x
  }
}



最后的结果是:
5.0 to the power 4 is 625.0
7.5 to the power 5 is 23730.46875
7.5 to the power 0 is 1.0
10 to the power -2 is 0.01

为什么会是这样的结果,我想他们的结果应该都是1.0,在power自身调用自身时,他应该没有返回值,直到最后n的值到0的时候才有返回值?但是每次返回一个自身x的值后再*以以前的值,不明白,那们大大能给指点一下吗???谢谢先!!!

论坛徽章:
0
2 [报告]
发表于 2006-08-08 23:02 |只看该作者
递归调用。
举第一个 power(x,4)为例子:

power(x,4)     n=4>1     返回x*(power(x,3))
power(x,3)     n=3>1     返回x*(power(x,2))
power(x,2)     n=2>1     返回x*(power(x,1))
power(x,1)     n=1         返回x
从下往上计算x*x*x*x=5*5*5*5=625,

论坛徽章:
0
3 [报告]
发表于 2006-08-09 00:58 |只看该作者
噢,原来是这样的..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP