首页 > 解决方案 > 没有基本情况的递归?这个函数如何终止?

问题描述

我在这个堆栈溢出答案中找到了这段代码,我试图了解这个递归函数是如何终止的。我没有在那个线程上问这个问题的原因是我的问题是关于递归,而不是关于那里讨论的内容(加密)。

/// <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);
}

标签: c#recursionrecursive-backtracking

解决方案


它不是递归的。

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


推荐阅读