没有基本情况的递归?这个函数如何终止?

Recursion without a base case? How does this function terminate?

我在这个 stack overflow answer 中找到了这段代码,我试图了解这个递归函数是如何终止的。我不在该线程上提问的原因是我的问题是关于递归的,而不是关于那里讨论的内容(加密)。

/// <summary>
/// Simple Encryption (AES) then Authentication (HMAC) for a UTF8 Message.
/// </summary>
/// <param name="secretMessage">The secret message.</param>
/// <param name="cryptKey">The crypt key.</param>
/// <param name="authKey">The auth key.</param>
/// <param name="nonSecretPayload">(Optional) Non-Secret Payload.</param>
/// <returns>
/// Encrypted Message
/// </returns>
/// <exception cref="System.ArgumentException">Secret Message Required!;secretMessage</exception>
/// <remarks>
/// Adds overhead of (Optional-Payload + BlockSize(16) + Message-Padded-To-Blocksize +  HMac-Tag(32)) * 1.33 Base64
/// </remarks>
public static string SimpleEncrypt(string secretMessage, byte[] cryptKey, byte[] authKey,
                   byte[] nonSecretPayload = null)
{
  if (string.IsNullOrEmpty(secretMessage))
    throw new ArgumentException("Secret Message Required!", "secretMessage");

  var plainText = Encoding.UTF8.GetBytes(secretMessage);
  //My question: There's a recursive call here but no base case specified
  var cipherText = SimpleEncrypt(plainText, cryptKey, authKey, nonSecretPayload);
  return Convert.ToBase64String(cipherText);
}

它不是递归的。

var plainText = Encoding.UTF8.GetBytes() returns 一个字节数组,导致 SimpleEncrypt(byte[] ...) 在要调用的文件中进一步重载。