永发信息网

java递归求数字10的阶乘。

答案:6  悬赏:0  手机版
解决时间 2021-04-05 08:18
java递归求数字10的阶乘。
最佳答案
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);

     }

    }

}
全部回答
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()顺序:
第一次: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???这是我想不通的缘故。有没有简介通俗的语句和我解释下呢?
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(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???这是我想不通的缘故。有没有简介通俗的语句和我解释下呢?追答我这样说你还不能理解,那你还是去看看书吧,看看递归是怎么回事。。。。
我按照我的理解给你解答一下,希望你能看明白。
我理解中的递归,就是在没完成当前运算的情况下,先完成当前运算的上一级,如上一级仍未完成则继续推向上一级,知道完成某一级运算后,在逐条往回返,最终的运算结果就是最终的值。
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作为一个记录中间结果的载体,与上面所说的某一个值所代表的意思是一样的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我在香港的免税店购买手机被宰了1500多~~想问
37÷34=________.
我姥姥今年83岁了,身体哪方面都挺好的
我的移动硬盘加密后密码忘了怎么办!高手解决
(5/6×3/4+5/6×4/5+3/
ipad上安装什么版本的qq好
一个长方体的底面积是75cm2,高是15cm,它的
有哪些价值观,职业规划书中的我的职业价值观
十堰六堰人民商场属于什么区
风云2手游仙翼快速进阶方法 风云2仙翼怎么进
x^2-3x+2因式分解
英语翻译其大略如此.朕顾思之,恐不免斯过.公
9:49英语怎么写(逆读法)
涡轮增压汽车发动机寿命长吗,后期维护费用高
哈夏音乐会上,优美的琴声是来自于琴弦的____
推荐资讯
我的黑豹小货车电瓶和起动机都是新的就是打不
坟墓能不能用水泥把封起来
捡到乌龟代表什么,在自家门口捡到乌龟代表什
农行的k宝怎么弄
女友知道我不是处男,怎么办?
大连老虎滩海洋公园的营业时间是几点啊?
求助雷霆快艇开始怎样开喷气加速??就像卡丁
如何在惠普笔记本中升级到win10系统
单选题IvisitsomeEnglish-learningwebsites_
鲜花馅怎么调口感好吃
中国学生怎么考韩国的大学
夫妻一方宅基地动迁被分到的房屋算夫妻共同财
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?