请在以下代码中解释recursion语句的工作原理.
int factR(int n) {
int result;
if(n==1) return 1;
result = factR(n-1) * n;
return result;
}
Run Code Online (Sandbox Code Playgroud)
我的理解是:
在上面的语句中,该factR(n-1)
方法调用自身直到结束.假设我们想得到6的阶乘,它将作为参数发送给这个方法.它将作为参数接收n
,n
然后将检查其值; 如果是1那么将返回1.但是如果它不是1,就像我们的情况那样它是6,则递归语句将运行.
现在我遇到的问题是第一次n-1
变为5并且乘以n,其保持值6,然后它变为30.现在30将GO在哪里?
然后该方法将调用自身,此时间n-1
变为4,然后它乘以n
IF保持值"6"然后4*6 = 24,我认为这是错误的.因为如果我们经历这种方式,那么在下一次调用中,进程将是类似的,n-1
将变为3*n,其中IF保持相同的值,即6然后它将变为3*6 = 18.然后下一次调用发生并且n-1
变为2我们乘以并假设它n
保持值6然后2*6 = 12,并且最后调用n-1
= 1*n = 6.我的观点是很明显n-1
会减小值,n-1
即6-1 = 5然后5-1 = 4然后4-1 = 3然后3-1 = 2和2-1 = 1.但问题是,n
每当方法调用自身时,它的值是多少?
如果你说当第一次乘法发生时,即"n-1"变为5然后乘以6 = 30而30则存储在"n"然后在下一次调用中5-1 = 4*30 = 120,然后4- 1 = 3*120 = 360,然后3-1 …