黑马程序员技术交流社区

标题: 递归 [打印本页]

作者: exist    时间: 2015-4-26 23:14
标题: 递归
本帖最后由 exist 于 2015-4-26 23:50 编辑
  1. public static int getSum(int a){
  2.        if(a==1|a==0){
  3.                return 1;
  4.        }
  5.        return a+getSun(a-1);
  6. }
复制代码

return 1是什么意思
作者: xiao7181jun    时间: 2015-4-26 23:24
本帖最后由 xiao7181jun 于 2015-4-26 23:29 编辑

return 就是返回值语句呀。return 1就是你执行判断条件后的结果。如果 if语句中的条件  满足的话就执行return 1,   不满足就执行 return a+getSun(a-1);。
这样你如果调用这个函数,然后打印此函数的运算结果的话就会不一样。return 1 就是这个函数的运算结果其中之一。 执行return 1,打印到控制台结果就是 1。

作者: 忘言    时间: 2015-4-26 23:49
if里面的条件是非法表达式
作者: exist    时间: 2015-4-26 23:50
忘言 发表于 2015-4-26 23:49
if里面的条件是非法表达式

= =!不小心少打了个a
作者: lshaizj    时间: 2015-4-26 23:51
书上说return 应该是反回给调用者
作者: WanLum    时间: 2015-4-26 23:52
递归,就是在运行的过程中调用自己。
b(0) = 1 [基本情况] Fib(1) = 1 [基本情况] 对所有n > 1的整数:Fib(n) = (Fib(n-1) + Fib(n-2)) [递归定义] 尽管有许多数学函数均可以递归表示,但在实际应用中,递归定义的高开销往往会让人望而却步。例如:
阶乘(1) = 1 [基本情况] 对所有n > 1的整数:阶乘(n) = (n * 阶乘(n-1)) [递归定义] 一种便于理解的心理模型,是认为递归定义对对象的定义是按照“先前定义的”同类对象来定义的。例如:你怎样才能移动100个箱子?答案:你首先移动一个箱子,并记下它移动到的位置,然后再去解决较小的问题:你怎样才能移动99个箱子?最终,你的问题将变为怎样移动一个箱子,而这时你已经知道该怎么做的。
作者: jiangwenjun    时间: 2015-4-26 23:53
就是停下来的  返回值 1 出去
作者: exist    时间: 2015-4-26 23:54
WanLum 发表于 2015-4-26 23:52
递归,就是在运行的过程中调用自己。
b(0) = 1 [基本情况] Fib(1) = 1 [基本情况] 对所有n > 1的整数:Fib( ...

我想知道 return 1 改成return 2  或者别的结果不一样 是如何计算
作者: 忘言    时间: 2015-4-26 23:58
看楼主的代码是想打印斐波那契数列吧,当a==1或者a==0的时候,返回1,表示第一个和第二个数都等于1,从第三个数开始,数值大小等于前面两个数之和,所以返回a+getSun(a-1)
作者: Dylon    时间: 2015-4-27 00:01
楼主,从表面上看这是求自然数0~a之间的数的和的程序吧,return 1;就是程序的结束点,要不然程序会一直递归下去。不过前提是 a是大于等于零的自然数。
作者: Dylon    时间: 2015-4-27 00:03
不过if语句中a==0也会返回1,就不是求和的问题了。总之return 1;是结束点。如果程序录入的是负数的话会有问题产生
作者: yelebron    时间: 2015-4-27 00:20
就是递归的结束,递归要有结束的条件
作者: 斷灬dian    时间: 2015-4-27 00:38
来学习 学习
作者: WanLum    时间: 2015-4-28 21:56
exist 发表于 2015-4-26 23:54
我想知道 return 1 改成return 2  或者别的结果不一样 是如何计算

好吧,,你说的对啊




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