Hier mal die „vertausche zwei Zeichen in jedem Rekursionsschritt“-Variante in Io implementiert. Io hat im Gegensatz zu Python auch Zeichenketten die veränderbar sind, weshalb das nicht ganz so ineffizient ist wie in Python.
Code: Alles auswählen
#!/usr/bin/env io
Sequence swap := method(i, j,
tmp := self at(i)
self atPut(i, self at(j))
self atPut(j, tmp)
)
reverse := method(sequence, start, end,
if(start >= end,
sequence
,
reverse(sequence swap(start, end), start + 1, end - 1)
)
)
main := method(reverse("Das Haus ist grün." asMutable, 3, 12) println)
isLaunchScript ifTrue(main)
Die Alternative wäre im Rekursionsschritt den Präfix der nicht umgedreht werden soll, gefolgt vom Buchstaben am zweiten Index, gefolgt vom umgedrehten Teil zwischen den beiden Indizes (Rekursiver aufruf), gefolgt vom Buchstaben am ersten Index, gefolgt vom Suffix der nicht umgedreht werden soll, zu bestimmen. Das mit Prä- und Suffix ist eigentlich nur beim ersten Aufruf nötig, denn in jedem rekursiven Aufruf sind diese beiden Teilzeichenketten leer. Der Ansatz als Bash-Skript:
Code: Alles auswählen
#!/bin/bash
Reverse() {
local string=$1
local start=$2
local end=$3
if (( start >= end )); then
echo "$string"
else
local prefix=${string:0:start}
local left_character=${string:start:1}
local middle=${string:start+1:end-start-1}
local reversed_middle=$(Reverse "$middle" 0 $(( ${#middle} - 1 )))
local right_character=${string:end:1}
local suffix=${string:end+1}
echo "$prefix$right_character$reversed_middle$left_character$suffix"
fi
}
Reverse 'Das Haus ist grün.' 3 12