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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 耳东君 中级黑马   /  2015-4-1 22:56  /  1542 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class  TestDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int sun = getSun(4);
  6.                 System.out.println("sun="+sun);
  7.         }

  8.         public static int getSun(int a)
  9.         {
  10.                 if (a == 1)
  11.                 {
  12.                         return 1;
  13.                 }
  14.                 int temp = getSun(a-1);
  15.                 System.out.println("a="+a);
  16.                 return temp+a;
  17.         }
  18. }
复制代码


打印的结果为:
a=2
a=3
a=4
sun=10
请问a的变化动作是怎么完成的?

4 个回复

倒序浏览
本帖最后由 liyanghml 于 2015-4-2 03:16 编辑
  1. public static int getSun(int a)
  2.         {
  3.                 if (a == 1)
  4.                 {
  5.                         return 1;
  6.                 }
  7.                 int temp = getSun(a-1);
  8.                 System.out.println("a="+a);
  9.                 return temp+a;
  10.         }
复制代码
    (1)a=4 调用getSun(a-1),此时a-1=3,   
     (2)a=3调用getSun(a),执行到getSun(a-1),此时a-1=2,
     (3)a=2调用getSun(a),执行到getSun(a-1),此时a-1=1,
     (4)a=1调用getSun(a),符合条件(a==1),return 1;
              之后逆向进入(3)temp=1,a=2输出打印a=2,返回temp+a=3,在回到(2)temp=3,a=3输出打印a=3,返回temp+a=6
              再回到(1)temp=6,a=4输出打印a=4,返回temp+a=10;




回复 使用道具 举报
你可以在网上搜一下递归和栈的文章看一下。递归一般都是用栈这种数据结构实现的。
回复 使用道具 举报
学习了。
回复 使用道具 举报
就是这样完成的  小伙子好好想想
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马