Java初学者 - 错误的简单代码

syi*_*nop 2 java

这是我第一次来这里,所以我不确切知道它是如何工作的,所以很抱歉这些错误.

当我们给出"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岁?我假设我做错了什么.

先感谢您.

rge*_*man 9

让我们分解这个递归调用:

m(3),p0,所以我们回来3*3 + m(2);.

3*3 + (m(2))
Run Code Online (Sandbox Code Playgroud)

m(2),p0,所以我们回来3*2 + m(1);.

3*3 + (3*2 + m(1))
Run Code Online (Sandbox Code Playgroud)

m(1),p0,所以我们回来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)