黑马程序员技术交流社区

标题: 关于这个递归的问题 [打印本页]

作者: 耳东君    时间: 2015-4-1 22:56
标题: 关于这个递归的问题
  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的变化动作是怎么完成的?
作者: liyanghml    时间: 2015-4-2 03:02
本帖最后由 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;





作者: 怀念子龙    时间: 2015-4-2 10:26
你可以在网上搜一下递归和栈的文章看一下。递归一般都是用栈这种数据结构实现的。
作者: 胡几手    时间: 2015-4-2 10:57
学习了。
作者: 西门夜说    时间: 2015-4-13 23:42
就是这样完成的  小伙子好好想想




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2