递归算法,他们的返回值怎么就进行相乘了呢?
发布网友
发布时间:2022-05-30 08:10
我来回答
共5个回答
热心网友
时间:2023-10-16 01:38
int fact(int n) {
int result;
if (n == 1){
return 1;
}
result = fact(n- 1) * n;/*当程序运行到这里,调用本身函数fact(n-1)重新运行本身函数,就等于一个函数中还包含着其他函数,函数包含函数,递归中层层包含的函数都只是自己而已*/
return result;
}
以上递归函数,当每执行一次result = fact(n- 1) * n;都会调用其中的fact(n-1),由于n的变化(也就是n-1变成了下一次调用的参数值),每次调用除了最后一次外,都不是完整的调用,并没有返回result,也就是没有执行return语句,但当最后一次调用时候,n==1,返回1,这个1返回到result = fact(n- 1) * n;语句里代替了fact(n-1),这是最里面一层函数调用完毕,然后往外调用,直到最外面一层。
这种原理就好比一个表达式里加了n个括号,括号里面镶嵌着括号,也只有最里面的括号被求解完毕,外面的括号才会求解,最终得到解!
热心网友
时间:2023-10-16 01:39
程序没错,结果也是相乘。
你可以先假设n=2,递归一次,就是这里 fact(n- 1) ,调用了fact(1),返回1
所以2的时候结果是result =1*2=2;
假设n=3,result = fact(n- 1) * n=fact(2)*3=(注意上面2已经有结果)2*3=6
假设n=4,result = fact(n- 1) * n=fact(3)*4=(注意上面2已经有结果)6*4=24
这就是递归。
热心网友
时间:2023-10-16 01:39
比如说,你有个小弟,他专门干一件事:算阶乘。你只需要告诉他算出n的阶乘,小弟知道这个n后就会算出来告诉你。。。至于小弟怎么算出来,就不需要你知道了
没想到的是,其实你的小弟也跟你一样有个小弟,称为小弟弟(- -),小弟弟专门干一件事:算阶乘。他的大哥(其实就是你小弟)告诉他算m的阶乘,小弟弟知道这个m后就会算出来告诉他大哥。。。至于小弟弟怎么算出来,就不需要他大哥知道了。
。。。。。。
好了,现在你调用一次fact(n),fact()想:找个人帮我算出(n-1)!,然后我自己再乘上n不就行了。。。于是fact()会调用fact(n-1)。。。。。。然后,就是不停的出现这种过程。
最后fact(2)的时候,fact(2)会调用fact(1),fact(1)一看自己就会算了,直接返回值1,fact(2)收到1,乘上2,返回给fact(3)。。。。最后返回到fact(n)
热心网友
时间:2023-10-16 01:40
result = fact(n- 1) * n;
就是相乘啊`~
热心网友
时间:2023-10-16 01:40
nt fact(int n) {
int result;
if (n == 1){
return 1;
}
else
result = fact(n- 1) * n;
return result;
}