如何解决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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。