java递归求数字10的阶乘。
答案:6 悬赏:0 手机版
解决时间 2021-04-05 08:18
- 提问者网友:蓝莓格格巫
- 2021-04-04 20:40
java递归求数字10的阶乘。
最佳答案
- 五星知识达人网友:爱难随人意
- 2021-04-04 21:21
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);
}
}
}
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);
}
}
}
全部回答
- 1楼网友:春色三分
- 2021-04-04 23:49
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
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
- 2楼网友:街头电车
- 2021-04-04 22:56
程序的调用add()顺序:
第一次:i=10,进到add()方法里,因为不满足i==1,所以执行else里的代码,此时返回add(9)*10,
第二次:i=9,进到add()方法里,执行else,此时add(9)=add(8)*9,加上第一次的则else执行的是add(8)*9*10,
第三次:i=8,进到add()方法里,执行else,此时add(8)=add(7)*8,加上第一次的则else执行的是add(7)*8*9*10,
第四次:i=7,进到add()方法里,执行else,此时add(7)=add(6)*7,加上第一次的则else执行的是add(6)*7*8*9*10,
依次类推,直到add()里传入的值减为1,就执行的是1*2*3...*10了,即时10的阶乘。追问关键是这个代码为什么会把之前返回的数也乘上??比如最开始是add(9)*10,递归后是add(8)*9为什么默认就乘以10???这是我想不通的缘故。有没有简介通俗的语句和我解释下呢?
第一次:i=10,进到add()方法里,因为不满足i==1,所以执行else里的代码,此时返回add(9)*10,
第二次:i=9,进到add()方法里,执行else,此时add(9)=add(8)*9,加上第一次的则else执行的是add(8)*9*10,
第三次:i=8,进到add()方法里,执行else,此时add(8)=add(7)*8,加上第一次的则else执行的是add(7)*8*9*10,
第四次:i=7,进到add()方法里,执行else,此时add(7)=add(6)*7,加上第一次的则else执行的是add(6)*7*8*9*10,
依次类推,直到add()里传入的值减为1,就执行的是1*2*3...*10了,即时10的阶乘。追问关键是这个代码为什么会把之前返回的数也乘上??比如最开始是add(9)*10,递归后是add(8)*9为什么默认就乘以10???这是我想不通的缘故。有没有简介通俗的语句和我解释下呢?
- 3楼网友:你哪知我潦倒为你
- 2021-04-04 22:38
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没啥关系
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没啥关系
- 4楼网友:逃夭
- 2021-04-04 22:14
递归的程序,代码很短,就是要想好流程,实在看不懂,就用真实的数据来一行行的走.注意结束的条件
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???这是我想不通的缘故。有没有简介通俗的语句和我解释下呢?追答我这样说你还不能理解,那你还是去看看书吧,看看递归是怎么回事。。。。
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???这是我想不通的缘故。有没有简介通俗的语句和我解释下呢?追答我这样说你还不能理解,那你还是去看看书吧,看看递归是怎么回事。。。。
- 5楼网友:西岸风
- 2021-04-04 22:02
我按照我的理解给你解答一下,希望你能看明白。
我理解中的递归,就是在没完成当前运算的情况下,先完成当前运算的上一级,如上一级仍未完成则继续推向上一级,知道完成某一级运算后,在逐条往回返,最终的运算结果就是最终的值。
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作为一个记录中间结果的载体,与上面所说的某一个值所代表的意思是一样的。
我理解中的递归,就是在没完成当前运算的情况下,先完成当前运算的上一级,如上一级仍未完成则继续推向上一级,知道完成某一级运算后,在逐条往回返,最终的运算结果就是最终的值。
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作为一个记录中间结果的载体,与上面所说的某一个值所代表的意思是一样的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯