黑马程序员技术交流社区

标题: Java中递归的问题 [打印本页]

作者: ╮福尔摩斯`    时间: 2014-7-11 22:14
标题: Java中递归的问题
来几个大神 帮我算下     并且 解释下:)(主要是解释下)

class  DiGui
{
public static void main(String[] args)
{
  
int sum=getSum(50);
System.out.println(sum);
}
static int getSum(int n)
{
if (n==1)
{
  return n*n;
}
int temp=getSum(n-1);
  return temp+n*n;

}
}

作者: ss5619498    时间: 2014-7-11 22:42
深层递归调用:答案是42925
做到结果是小于等于50的数的平方的和
我先讲第一步,你就应该会理解点


class  DiGui
{
public static void main(String[] args)
{
  
int sum=getSum(50);   第一次执行:n=50
System.out.println(sum);
}
static int getSum(int n)
{
if (n==1)  n为50 所以不等于1,不执行这一步
{
  return n*n;
}
int temp=getSum(n-1);  直接跳转到这一步,执行这一步,结果是getSun(getSun(49)+50*50 );然后继续执行里面的那个getSun;知道getSun中的n的值为1为止;
  return temp+n*n;

}
}

作者: jwx555    时间: 2014-7-11 22:42
  1. class  DiGui
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.   
  6.                 int sum=getSum(50);
  7.                 System.out.println(sum);
  8.         }

  9.         //计算一个数的阶乘
  10.         static int getSum(int n)
  11.         {
  12.                 //递归的结束条件
  13.                 //从最大数递归到最小1就结束递归,开始一层一层返回值
  14.                 if (n==1)
  15.                 {
  16.                         return 1;
  17.                 }
  18.                 //进入递归的语句,自己调用自己
  19.                 //但是参数比之前少1,每一次调用参数就减1
  20.                 int temp=getSum(n-1);
  21.                
  22.                 //调用完返回值
  23.                 return temp+n*n;

  24.         }
  25. }
复制代码

代码都是一行一行执行,遇到方法则优先去执行方法,回头再继续执行
图简单画的,希望你能看懂,按数字去走应该比较容易理解了吧

作者: ╮福尔摩斯`    时间: 2014-7-11 22:44
恩  我再琢磨琢磨
作者: 杨冬冬    时间: 2014-7-11 23:40
你可以进行断点调试,查看他的流程,希望能帮到你
作者: ╮福尔摩斯`    时间: 2014-7-13 20:15
杨冬冬 发表于 2014-7-11 23:40
你可以进行断点调试,查看他的流程,希望能帮到你

断点调试是什么
作者: 杨冬冬    时间: 2014-7-13 22:20
它主要是Eclipse开发工具中帮助程序员排错,向程序员展现所有的开发流程而使用的一种方法
作者: ╮福尔摩斯`    时间: 2014-7-14 00:07
杨冬冬 发表于 2014-7-13 22:20
它主要是Eclipse开发工具中帮助程序员排错,向程序员展现所有的开发流程而使用的一种方法 ...

我刚从记事本升级到EditPlus   Eclipse更高级吗?    看来要学的还很多啊
作者: 郑飞    时间: 2014-7-14 18:20
亲 你把代码层次摆好啊 太难看了 蛋疼
递归在这里:
int temp=getSum(n-1);
  return temp+n*n;
实在看不懂的话 代个数字进去 一下明白  拿10做例子 返回的是 getSun(9)+10*10
第二次进入方法就是 getSun(8)+9*9+10*10
一直到 1*1+......+9*9+10*10
然后回过头去好好看代码
作者: jwx555    时间: 2014-7-14 20:00
晕了  我说这么眼熟  我回答过
作者: ╮福尔摩斯`    时间: 2014-7-14 22:27
郑飞 发表于 2014-7-14 18:20
亲 你把代码层次摆好啊 太难看了 蛋疼
递归在这里:
int temp=getSum(n-1);

额~~是有点乱




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