这是我第一次来这里,所以我不确切知道它是如何工作的,所以很抱歉这些错误.
当我们给出"aktueller参数"3号时,这个函数的结果是什么?
(原文:
Welches Ergebnis liefert diese Methode,wenn bei einem Aufruf als aktueller Parameter der Wert3übergebenwird?
我正在学习德语,所以我真的不懂英语术语:/)
public int m(int p)
{
int result;
if (p == 0)
{
result = 0;
}
else
{
result = 3*p + m(p-1);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了,答案是18,但是当我试图在没有任何程序的情况下尝试时,我找到的答案是15:
result = 3 * 3 + 3(3-1);
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下为什么18岁而不是15岁?我假设我做错了什么.
先感谢您.
让我们分解这个递归调用:
有m(3),p不0,所以我们回来3*3 + m(2);.
3*3 + (m(2))
Run Code Online (Sandbox Code Playgroud)
有m(2),p不0,所以我们回来3*2 + m(1);.
3*3 + (3*2 + m(1))
Run Code Online (Sandbox Code Playgroud)
有m(1),p不0,所以我们回来3*1 + m(0);.
3*3 + (3*2 + (3*1 + m(0))
Run Code Online (Sandbox Code Playgroud)
有了m(0),p是的0,所以我们回来了0.然后递归调用堆栈展开.
3*3 + (3*2 + (3*1 + (0)) =
9 + (6 + (3 + 0)) =
9 + (6 + 3) =
9 + 9 =
18
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |