Skriv en funktion
maxv =
rec_max(v), som använder rekursion för att hitta
största värdet i vektorn v.
Skriv en funktion
M =
build_matrix(n) som med rekursion skapar en matris enligt
följande exempel (det är OK om
build_matrix i sig inte är
rekursiv utan bara anropar en rekursiv rutin)
:
>> build_matrix(1)
ans =
1
>> build_matrix(2)
ans =
2 2 2
2 1 2
2 2 2
>> build_matrix(3)
ans =
3 3
3 3 3
3 2
2 2 3
3 2
1 2 3
3 2
2 2 3
3 3
3 3 3
>> build_matrix(4)
ans =
4 4
4 4
4 4 4
4 3
3 3
3 3 4
4 3
2 2
2 3 4
4 3
2 1
2 3 4
4 3
2 2
2 3 4
4 3
3 3
3 3 4
4 4
4 4
4 4 4
Skriv en rutin,
pascal_main(n), som skriver ut
de
n första raderna
i Pascals triangel. Det kan se ut så här:
>> pascal_main(7)
1
1 1
1 2 1
1 3
3 1
1 4
6 4 1
1 5 10
10 5 1
1 6 15
20 15
6 1
I min lösning anropar
pascal_main
funktionen
pascal, som
är rekursiv.
Rita ett H-träd. Här
är de första stegen,
Htree(0),
Htree(1), Htree(2).
Det första trädet ritas som ett H med sidlängden ett.
Man ritar sedan fyra träd av halva storleken etc. Här ett
träd med fler nivåer:
Skapa en variant av Kochkurvan,
koch_rect.m,
där vi har rektanglar istället för liksidiga trianglar.
Så här kan de tre första stegen se ut för en
rät linje:
Notera att jag bygger ut rektanglarna med höjden en halv, annars
kommer de att gå emot varandra.
Startar man med enhetskvadraten får man följande bild efter
sex rekursionssteg (jag har infört rekursionssteg istället
för normen, eftersom linjesegmenten kan ha olika längd):
Rita
Sierpinskis
triangel. Jag gör inte som i Wikipedia-artikeln. Här är
det första fyra stegen.
och här efter ytterligare några steg. I bilden till
höger använder jag kommandot
fill, som fyller polygoner,
istället för plot-kommandot:
Programmen heter
sierp_main.m
(resp.
sierp_col.m) de
är
inte vektoriserade.
Testa också
sierp_col_3d.
Rotera plotten!
Åttadamsproblemet.
Uppgiften består i att placera åtta damer på ett
schackbräde (en 8x8-matris) så att ingen dam kan slå
en annan dam. En
dam kan
slå pjäser i samma rad, i samma kolonn och diagonalt.
Så här kan
en
lösning se ut (damerna är markerade med röda prickar):
Gör en rekursiv lösning. Programmet heter
queen8.m. Om du vill kan du
skriva ett program som kan placera ut n damer i en n x n-matris (det
är inte mycket svårare).
Man kan ibland använda
fraktaler i datorgrafik för att rita träd etc. Här ett
träd som jag har gjort med ett sk
Lindenmayersystem.
Du kan köra programmet
lsyst.m
(man får inte samma träd varje gång eftersom jag har
lagt in lite slumpriktningar). Programmet är dock
inte rekursivt och jag har bara
tagit med det för att det är lite kul.