黑马程序员技术交流社区
标题:
关于这个递归的问题
[打印本页]
作者:
耳东君
时间:
2015-4-1 22:56
标题:
关于这个递归的问题
class TestDemo
{
public static void main(String[] args)
{
int sun = getSun(4);
System.out.println("sun="+sun);
}
public static int getSun(int a)
{
if (a == 1)
{
return 1;
}
int temp = getSun(a-1);
System.out.println("a="+a);
return temp+a;
}
}
复制代码
打印的结果为:
a=2
a=3
a=4
sun=10
请问a的变化动作是怎么完成的?
作者:
liyanghml
时间:
2015-4-2 03:02
本帖最后由 liyanghml 于 2015-4-2 03:16 编辑
public static int getSun(int a)
{
if (a == 1)
{
return 1;
}
int temp = getSun(a-1);
System.out.println("a="+a);
return temp+a;
}
复制代码
(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