没有基本情况的递归?该功能如何终止?

时间:2018-08-07 14:34:36

标签: c# recursion recursive-backtracking

我在此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);
}

1 个答案:

答案 0 :(得分:7)

这不是递归的。

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