用Julia编程语言编写的函数不会在返回

时间:2016-12-12 03:47:42

标签: recursion functional-programming return julia

我目前正在分配一门我正在大学里学习的课程(编程语言理论)。这项任务的一部分在于解决问题,虽然使用命令式/结构化方法相对简单易于解决;当使用函数式语言(例如,矩阵乘法)时,并不是那么微不足道。

因此,我们有10个问题需要解决,我们可以使用任何函数语言(或者至少是一种支持函数式编程的编程语言)。所以,虽然我对Haskell和Miranda非常熟悉,但我自己学习如何在Julia中编程,因此我选择它作为这项工作的编程语言。

我必须解决的一个问题是创建一个程序,如果字符串“S”作为输入,如果字符串包含任何子回合并且其长度大于(或等于)的子串,则返回“true” 3.

所以,我使用了“强力递归”方法:测试输入字符串 S 是否是回文,如果是,则返回true,否则递归检查 S 没有它的第一个字符或没有它的最后一个字符是回文。如果有的话 no palindrome substring大于或等于3,返回false

这将创建一个递归树,检查S中所有可能的子串。即使这个算法是指数的,它也可以完成工作。 此外,我不能使用动态编程,分而治之,记忆,高效的数据结构或任何“ dank算法设计技术” - 所以,我必须坚持纯粹的功能,递归方法。

以下是代码:

function SubPalin(S)
  if length(S) > 2
    if palindromeChecker(S) == true
      return true
    else
      SubPalin(S[2:end])
      SubPalin(S[1:end-1])
    end
  else
    return false
  end
end

注意:palindromeChecker是一个检查子串是否是回文的函数(是的,很明显,我知道)

问题是:当此代码执行检查所有可能的大于3的子串时,它在找到回文子串时不会停止。甚至奇怪的是,经过一些测试,我发现代码即使返回true也不会停止。它一直持续到发现递归基础为止。

那么,发生了什么?我只是愚蠢而且我看不到这个错误或该语言出了什么问题?

1 个答案:

答案 0 :(得分:2)

你可能想在你的第一个分支中考虑这样的代码行? return SubPalin(S[2:end]) || SubPalin(S[1:end-1])