2012-03-24 67 views
1

我试图写一个递归函数会得到一些字符串,以及该字符串作为其参数的lenght,然后打印出原始字符串在字符串中的元音,以及该字符串中元音的相反顺序。例如,如果字符串是'Horse',那么输出将是'Horse eo'。打印原始字符串以及递归

什么我遇到的麻烦是如何获得,同时还得到了元音以相反的顺序打印的原始字符串。我正在用伪代码编写这个函数,我只打印出反转的元音如下。

MODULE VowelRecursion(String, n) 
    IF n != 0 THEN 
     letter := first letter of String 
     vowel := "" 
     IF letter == vowel THEN 
      vowel := letter 
     ENDIF 
     VowelRecursion(remainder of String, n-1) 
     Print(vowel) 
     ENDIF 
ENDMODULE 

就像我提到的,我的问题是,我无法弄清楚如何让印刷原始字符串元音发现已经完成后,作为原始字符串需要先打印,并这样做是不是必须先返回n变为0?但问题是,既然我们正在调用其余串的功能,这将只是一个空字符串,当n == 0,对不对?

由于这是我需要解决学校的问题,我不找任何现成的解决方案,但我想听到这里我的思维过程是怎么了,我可以用它来什么样的方法实现需要的东西。

谢谢。

回答

0

在下降到下一个递归级别之前,即在拨打VowelRecursion(remainder of String, n-1)之前,您可能会打印letter

Print(letter) 
VowelRecursion(remainder of String, n-1) 
Print(vowel) 
+0

谢谢。通过一些测试,看起来我可以立即开始工作。 – user1290164 2012-03-24 17:05:09

0

您可以在递归期间传递原始字符串。你不会修改那个字符串,但是当递归完成时你只需要使用它。另外,找到它时不能打印元音。您需要将它们存储在某处,并且只有在完成后才打印出来。

这意味着你应该添加两个参数:一个包含原始字符串和(计算)字符串与元音迄今发现(初始为空)的参数。作为提示,您可以使用称为VowelRecursion("Horse", "Horse", "", 5)的递归函数来解决此问题。当n = 0时,您将拥有打印所需结果所需的所有值。

+0

感谢您的回复。我错过了在原始文章中提到的问题描述,我们得到的说明函数只允许获得前面提到的参数字符串和长度。我可以看到如何在参数中携带原始字符串会有所帮助。 – user1290164 2012-03-24 17:04:01