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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 冒牌高手 于 2014-8-10 15:30 编辑

编写递归函数求 1+2+3+……+n 的和;

在代码中我也没用到循环,详见代码
  1. class Demo
  2. {
  3.         static int rs=0;
  4.         public static void main(String[] args)
  5.         {
  6.                
  7.                 System.out.println(func(4));
  8.         }
  9.         static int func(int num)
  10.         {
  11.                 if (num>0)
  12.                 {
  13.                         rs+=num;
  14.                         return func(--num);
  15.                 }
  16.                 else
  17.                 {
  18.                         return rs;
  19.                 }
  20.         }
  21. }
复制代码


4 个回复

倒序浏览
return rs += func(--num)
回复 使用道具 举报
本帖最后由 fantacyleo 于 2014-8-8 10:19 编辑

结果正确,形式也正确。不过一般不推荐这么写,因为你这里对外暴露了递归函数中用到的变量rs,破坏了函数的封装性,而一般来说这是可以避免的。比较好的写法是:
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(func(4));
  6.         }
  7.         static int func(int num)
  8.         {
  9.                 if (num>0)
  10.                 {
  11.                         return num + func(num - 1);
  12.                 }
  13.                 else
  14.                 {
  15.                         return 0;
  16.                 }
  17.         }
  18. }
复制代码


如果你非要用一个变量专门表示和,也可以这样写:
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(func(4), 0);
  6.         }
  7.         static int func(int num, int sum)
  8.         {
  9.                 if (num>0)
  10.                 {
  11.                         return func(num - 1, sum + num);
  12.                 }
  13.                 else
  14.                 {
  15.                         return sum;
  16.                 }
  17.         }
  18. }
复制代码
回复 使用道具 举报
fantacyleo 发表于 2014-8-8 10:17
结果正确,形式也正确。不过一般不推荐这么写,因为你这里对外暴露了递归函数中用到的变量rs,破坏了函数的 ...

那是我自己想着写的....果然不正确,哈哈,有了那个变量,运行第二次的时候结果就不对了....所以还是你的写法是对的...我那个不对
回复 使用道具 举报
beyondjia 发表于 2014-8-8 11:15
正确的。不过总觉得1到100求和的问题上,递归的优势和形式不明显。。。阶乘和汉诺塔可以试着写写。。。 ...

不懂汉诺塔...百度去了,哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马