小写递归算法

时间:2017-01-20 21:49:07

标签: recursion pascal

我有这个代码用于以小写形式返回一个字符串,使用递归:

function min(ch:string):string;
begin
    if ( ch = '' ) then
      min:= ''
    else
      if (ch[1] in ['A'..'Z']) then
        begin
          ch[1]:=chr(ord(ch[1])+32);
          min:= ch[1] + min(copy(ch,2,length(ch)-1));
        end;
end;  

但它不起作用:

当我使用示例min('AbC')运行时,输出a仅为abc

这里的问题在哪里?

1 个答案:

答案 0 :(得分:1)

问题是你并不总是调用递归函数。一旦你找到一个已经是小写的字母,你就不再看它后面的字符了。因此返回值被截断为该字符。

当被查看的角色不是大写字母时,您也应该调用它。因此,将递归调用移出if,它将起作用:

function min(ch:string):string;
begin
    if ( ch = '' ) then
      min:= ''
    else
      begin 
        if (ch[1] in ['A'..'Z']) then
            ch[1]:=chr(ord(ch[1])+32);
        min:= ch[1] + min(copy(ch,2,length(ch)-1));
      end;
end;

ideone.com上看到它。