Nou, ik zit nu op stage en ben begonnen met het programeren in pascal. Heb dit een half jaar gehad op school, en omdat vele mij aanrade, en hier ook heb gelezen dat dit een goede taal is om mee te beginnen. Ben begonnen aan een tutorial en zit nu hardstikke vast. Hele middag mijn hersenen over gebroken en nu ga ik het hier neerzetten in de hoop er uit te gaan komen.
Eerst de oorzaak ervan, stukje en link naar de tutorial
http://web.mit.edu/taoyue/www/tutorials/pascal/pas4e.html
Deze code geeft als uitkomst:
Tot en met de uitvoer if1: 1* kan ik het volgen. Maar dan ook bij
Wat doet ie hier. Een functie moet een waarde krijgen doormiddel van dit commando. Leuk, maar daarna zou summation de waarde 1 krijgen. Maar de code gaat nog door...
De 2 en de 3 die hij bij afgaand er vanaf heeft gehaald telt ie dan op bij de 1.
de 1 van summation:=1. Als je die varanderd veranderd die 1 dus mee. Verlaag of verhoog ik die gaat de uitkomst mee. Geef ik de parameter 4 ipv 3 mee telt ie dus 1x vaker af. en komt de waarde 4 erbij. De uitkomst word dan dus ook 4 hoger.
Dat kan ik volgen. Maar ik begrijp niet wat en waarom vanaf dat punt dat ik al aangaf. na {10} dus.
Eerst de oorzaak ervan, stukje en link naar de tutorial
http://web.mit.edu/taoyue/www/tutorials/pascal/pas4e.html
ik heb ook wat stukjes code gemaakt om mijn best doen het te begrijpen.The summation function, designated by an uppercase Sigma in mathematics, is a popular example of recursion:
function Summation (num : integer) : integer;
begin
if num = 1 then
Summation := 1
else
Summation := Summation(num-1) + num
end;
Suppose you call Summation for 3.
a := Summation(3);
Summation(3) becomes Summation(2) + 3.
Summation(2) becomes Summation(1) + 2.
At 1, the recursion stops and becomes 1.
Summation(2) becomes 1 + 2 = 3.
Summation(3) becomes 3 + 3 = 6.
a becomes 6.
Recursion works backward until a given point is reached at which an answer is defined, and then works forward with that definition, solving the other definitions which rely upon that one.
Very important! All recursive procedures/functions must have some sort of test so stop the recursion. Under one condition, called the base condition, the recursion should stop. Under all other conditions, the recursion should go deeper. In the example above, the base condition was if num = 1. If you don't build in a base condition, the recursion will either not take place at all, or become infinite.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| program resuraction; uses crt;
var
a, b : integer;
function Summation (num : integer) : integer;
begin
if num = 1 then
begin
sound(200); delay(1000); {9}
writeln('if1: ',num,'* ');
sound(400); delay(1000); {10}
Summation:=1;
sound(600); delay(1000); {11}
writeln('if2: ',num,'* ');
sound(800); delay(1000); {12}
end
else
begin
sound(1000); delay(1000); {1,3,5,7}
writeln('else1: ',num,'* ');
sound(1200); delay(1000); {2,4,6,8}
Summation := Summation(num-1) + num;
sound(1400); delay(1000); {13,15,17,19}
writeln('else2: ',num,'* ');
sound(1600); delay(1000); {14,16,18,20}
end
end;
begin
a := Summation(3);
writeln(' ',a,'* ');
end. |
Deze code geeft als uitkomst:
Hier heb ik mee zitten spelen en dacht dat ik het redelijk door heb. Tot op een punt waar ik het echt helemaal kwijt word. Ik heb tussen apostrofs de volgorde neergezet wat ik hoor zodat ik de code dacht beter te kunnen volgen.else1: 3*
else1: 2*
if1: 1*
if2: 1*
else2: 2*
else2: 3*
6*
Tot en met de uitvoer if1: 1* kan ik het volgen. Maar dan ook bij
code:
1
| Summation:=1; |
Wat doet ie hier. Een functie moet een waarde krijgen doormiddel van dit commando. Leuk, maar daarna zou summation de waarde 1 krijgen. Maar de code gaat nog door...
De 2 en de 3 die hij bij afgaand er vanaf heeft gehaald telt ie dan op bij de 1.
de 1 van summation:=1. Als je die varanderd veranderd die 1 dus mee. Verlaag of verhoog ik die gaat de uitkomst mee. Geef ik de parameter 4 ipv 3 mee telt ie dus 1x vaker af. en komt de waarde 4 erbij. De uitkomst word dan dus ook 4 hoger.
Dat kan ik volgen. Maar ik begrijp niet wat en waarom vanaf dat punt dat ik al aangaf. na {10} dus.