java递归求数字10的阶乘。

publicstaticintadd(inti){if(i==1)return1;elsereturnadd(i=1)*i}现在i是10,进入到代码中的else这时候ad... public static int add(int i){
if(i==1)return 1;
else return add(i=1)*i
}

现在i是10,进入到代码中的else 这时候add(i-1)就是多少呢?是9吗?为什么?9乘以i就是乘以10等于90,

怎么一递归,又是90乘以8了呢? 如果按照我的分析。应该又是8乘以i就是乘以9等于72.里面的逻辑感觉好复制。有没有高手通过一种方式让我真正理解这个计算的过程。不然我一晚上睡不着。

非常非常感谢。要是用通俗的语言让我理解了计算过我在加30分的奖励分。
都回答的非常好我不知道选谁为答案了。。。。。。咋办啊。。。。。
展开
 我来答
blueyingzi
推荐于2017-10-11
知道答主
回答量:15
采纳率:0%
帮助的人:7.9万
展开全部
我按照我的理解给你解答一下,希望你能看明白。

我理解中的递归,就是在没完成当前运算的情况下,先完成当前运算的上一级,如上一级仍未完成则继续推向上一级,知道完成某一级运算后,在逐条往回返,最终的运算结果就是最终的值。

i 为 10时,add(10) = 10*(add(9)),此时10为整数,而我们需要计算出add(9)为多少;
i 为 9 时,add(9) = 9*(add(8)),这样再结合上一级 add(10) = 10*9*(add(8))
...
i 为2时, add(2) = 2*(add(1))=2*1,因此add(10) = 10*9*8*7*6*5*4*3*2*1.
追问
关键是这个代码为什么会把之前返回的数也乘上??比如最开始是add(9)*10,递归后是add(8)*9为什么默认就乘以10???这是我想不通的缘故。有没有简介通俗的语句和我解释下呢?
追答
因为你调用的方法是 add(10),那么add(10)的返回值就是10*某一个值,这个某一个值也是一个方法,需要计算后才能知道准确值,那么计算得来的值还是要与10相乘才能构成add(10)的返回值。
换个角度来看:该方法写的目的就是递归来计算某一个数的的阶乘,阶乘就是当前数依次乘以比它小一位的整数直到乘以1为止。所以方法就会按照这个目的来写。

int x = 1; // 1为初始值,由于与任何值相乘不影响结果。
for(int i=10;i>0;i--){
x = i * x

}

以上的代码也是来计算10的阶乘。其实和递归的道理一样,x作为一个记录中间结果的载体,与上面所说的某一个值所代表的意思是一样的。
小西
推荐于2017-09-28 · 运营
小西
运营
采纳数:218 获赞数:3887
百度知道热心用户

向TA提问 私信TA
展开全部
public class DiGui {

    public static void main(String[] args) {

    DiGui d = new DiGui();

    System.out.print(d.TT(10));

    }

    

    public double TT(int i)//写一个返回值为double 类型的方法,10的阶层值比较大int类型的值无法表示

    { //方法体比较简单

     if(i <= 1)

     {

     return i;

     }

     else

     {

     return i*TT(i-1);

     }

    }

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
截竹为萧
2013-08-27 · TA获得超过155个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:202万
展开全部
i=10 进入 代码中的else 这时候add(i-1)变成 add(9)*10 不是具体值 还在递归中。
add(9)又进入循环变成add(8)*9 所以到
8的时候 返回的是add(8)*9*10 之后 继续直到 add(1)*2*3*4*5*6*7*8*9 *10,由于add(1)=1
所以最终 为 1*2.....*10;
追问
关键是这个代码为什么会把之前返回的数也乘上??比如最开始是add(9)*10,递归后是add(8)*9为什么默认就乘以10???这是我想不通的缘故。有没有简介通俗的语句和我解释下呢?
追答
他有个return啊  每次返回 return add(i-1)*i   return 返回的不仅仅是add(i-1),他返回的值还要乘以i啊

开始的时候i=10啊 所以会renturn add(9)*10 ;第二次 i=9进去的啊 所以 add(9)=add(8)*9;带入到第一次 就变成 return add(8)*9 *10
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
历盆郁7
2013-08-27 · TA获得超过4277个赞
知道大有可为答主
回答量:1795
采纳率:100%
帮助的人:1017万
展开全部
递归的程序,代码很短,就是要想好流程,实在看不懂,就用真实的数据来一行行的走.注意结束的条件
add(10)
=add(9) * 10
=add(8) * 9 * 10
=add(7) * 8 * 9 * 10
=add(6) * 7 * 8 * 9 * 10
=add(5) * 6 * 7 * 8 * 9 * 10
=add(4) * 5 * 6 * 7 * 8 * 9 * 10
=add(3) * 4 * 5 * 6 * 7 * 8 * 9 * 10
=add(2) * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10
=add(1) * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10

根据条件,i==1的时候,返回1.所以,结束了,即:
1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 = 3628800
追问
关键是这个代码为什么会把之前返回的数也乘上??比如最开始是add(9)*10,递归后是add(8)*9为什么默认就乘以10???这是我想不通的缘故。有没有简介通俗的语句和我解释下呢?
追答
我这样说你还不能理解,那你还是去看看书吧,看看递归是怎么回事。。。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hitzsf
2013-08-27 · TA获得超过2060个赞
知道大有可为答主
回答量:1741
采纳率:78%
帮助的人:1210万
展开全部
add(10)时,返回 add(9) * 10 ,继续调用add(9)的方法,然后一路到底
add(9)时,返回 add(8)* 9
。。。。。。。。。。。。。
add(3),返回 add(2)*3
add(2),返回 add(1)*2
add(1),返回 1

最后就是10*9*8*---*3*2*1
追问
关键是这个代码为什么会把之前返回的数也乘上??比如最开始是add(9)*10,递归后是add(8)*9为什么默认就乘以10???这是我想不通的缘故。有没有简介通俗的语句和我解释下呢?
追答
呵呵,add(10),返回的是啥???
另外一个就是基本数据是按值传递的。和i没啥关系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式