小写递归算法

To lower case recursive algorithm

我有这段代码使用递归返回一个全小写的字符串:

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

这里的问题在哪里?

问题是你并不总是调用递归函数。一旦你发现一个已经是小写的字母,你就不会再看它后面的字符了。因此 return 值是 t运行 取决于该字符。

当被查看的字符不是大写字母时,您也应该调用它。因此,将递归调用移出 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 上查看 运行。