N次使用Recursion_how递归方法的返回类型如何工作

问题描述

private static int nTimesK(int n,int k) {
System.out.println("n: " + n);
// Recursive Case
if(n > 1) { 
    return k + nTimesK(n - 1,k);
}
// Base Case n = 1
else { 
    return k;
}
}
public static void main(String[] args) {
int result = nTimesK(4,4);
System.out.println("Result: " + result);
}

查询: 它的运行类似于return k + ntimesK(3,4),它的运行类似于return k + ntimesK(2,4),它的运行类似于return k + ntimesK(1,4) 其中n = 1是基本情况。想知道4 + ntimesK(3,4)如何得出值8,然后是12,最后是16。

解决方法

假设您调用传入4和4的方法(即nTimesK(4,4)),因为该方法在n> 1(4大于1)中执行return k + nTimes(n-1,k)。该语句由4 + nTimesK(3,4)代替(我们称此为A点)。计算无法返回响应,因为它必须等待nTimesK(3,4)的结果。调用nTimesK(3,4)时,它应将4 + nTimesK(2,4)(我们称之为B点)返回到第一个调用(A)。它必须等待nTimesK(2,4)执行后才能返回结果。因此,调用nTimesK(2,4)并返回4 + nTimesK(1,4)(我们称此为C点)。当C执行nTimesK(1,4)时,调用返回4(是基本条件,即n = 1)。因此,C现在可以向B返回4 + 4 (= 8)。B现在也可以向A返回4 + 8 (= 12)。A计算4 + 12 (= 16),并将答案返回到原始呼叫。因此,值为16。