.


:




:

































 

 

 

 


: . .

.

, : , .

 

, . , . C++ .

5.1. ( ).

int factorial(int N)

{

if (N == 0) return 1;

return N*factorial(N-1);

}

N!, . , N, N! int.

. , , , () , . , ,

N! = N∙ (N- 1)!, N ≥ 1, 0! = 1

C++ 5.1.

5.1 . , for :

for(t = 1, i = 1; i <= N; i++) t *= i;

 

, C++, , , , , . , :

.

.

, . , .

5.2 . , x , > , ( x ). t , , mod ( ), x mod , . , , . 5.2. ( ).

5.2 .

int gcd(int m, int n)

{

if (n == 0) return m;

return gcd(n, m%n);

}

5.3 . , , 4.1 4, ( ) , . , . .

char *a; int i;

int eval()

{

int x = 0;

while(a[i] == ' ') i++;

if (a[i] == '+')

{

i++;

return eval() + eval();

}

if (a[i] == '*')

{

i++;

return eval() * eval();

}

while((a[i] >= '0') && (a[i] <= '9'))

x = 10*x + (a[i++] - '0');

return x;

}

5.1

.

, for . , for, , , . , , . , , . . . . , , . .

, , . , . , , . 5.4 . , . , , 5.4, , , , .

5.4 .

, , .

count . , traverse, visit , . for while. traverseR . visit , .

remove . = x->next , , .

int count(link x)

{

if (x == 0) return 0;

return 1 + count(x->count)

}

void traverse(link h, void visit(link))

{

if (h == 0) return;

visit(h);

traverse(h->next, visit);

}

void traverseR(link h, void visit(link))

{

if (h == 0) return;

traverseR(h->next, visit);

visit(h);

}

void remove(link &x, Item v)

{

while(x!=0 && x->item == v)

{

link t = x;

x = x->next;

delete t;

}

if(x!= 0)

remove(x->next, v);

}

 

, .

, " " , .

N , [0],..., a[N-l]. :

for (t = a[0], i = 1; i < N; i++)

if (a[i] > t) t = a[i];

" ", 5.5 - ( ) ; " ".

5.5 " "

[l],..., [r] [l],, [m] [m+1] [r], () . , Item , > (, int).

, , , 1.

Item max (Item a[], int l, int r)

{

if (A == r) return a[l];

int m = (l+r)/2;

Item u = max (a, l, m);

Item v = max (a, m+1, r);

if (u > v) return u; else return v;

}

5.2 -

5.3 -

" " , 11, 6 5, 6 3 .., 1 (). , ( , ). , ; .

 

. N , . ( N ( 1) . () : (i) ; (ii) . 5.7 . , , (+ , ). : N N 1 , N , N 1 ( N). . . 5.4 N = 5 N = 3. ; .

5.6.

, () , , , , () .

void hanoi (int N, int d)

{

if (N = 0) return;

hanoi(N-l, -d);

shift(N, d);

hanoi(N-l, -d);

}

 

 

5.4

. ( ), 5 , ( ). . +1 -2 +1 +3+1-2+1 ( ).

 

, . 1/2 , 1/4 , 1/8 .. , , mark(x, h) h .

 

1/2" , , 0 2", . , , n 1 ..

5.7 " " ; .5.5. . , . ( ) (), ( ) (). , . 5.5 , , . , , : , , 1 . , , , , , , , , .

 



5.8 - ,

5.7.

void rule (int l, int r, int h)

{

int m = (l+r)/2;

if (h > 0)

{

rule(l, m, h-1);

mark(m, h);

rule(m, r, h-1);

}

}

5.8 , . (bottom-up) . , . " " , . , , , " ".

5.8

void rule (int l, int r, int h)

{

for (int t = l, j = l; t <= h; j += j, t++)

for (int i = 0; l+j+i <= r; i += j+j)

mark(l+j+i, t);

}

5.9 -

, .., . " ".

" " . , , , .

5.9 , .

int F(int i)

{

if (i < 1) return 0;

if (i == 1) return 1;

return F(i-1) + F(i-2);

}

 

. , FN FN+1. FN N, ~ 1,618 . , 5.9 . 5.10, , .

5.10 -

FN no , . , , , .

, N , N, :

F[0] = 0; F[1] = 1;

for(i = 2; i <= N; i++)

F[i] = F[i-1] + F[i-2]

 

. ; , .

. , , , , , , . (bottom-up dynamic programming). , . . , !

(top-down dynamic programming) , ( ) , . ( ) ( ). 5.10 5.9, . 5.11 , . (memoization).

5.11 -

, F9 , , .

5.10 ( )

( C++ 0) . int F(int i)

int F(int i)

{

static int knownF[maxN];

if (knownF[i]!= 0) return knownF[i];

int t = i;

if (i < 0) return 0;

if (i > 1) t = F(i-1) + F(i-2);

return knownF[i] = t;

}

: , , N , , . , , , . , , . 5.12, , , 17, ( ) 20 D 24 . .

, () . cap, i , , i- . , ( )
cap-items[i].size. : . , , .

5.12 -

() ( ) ( ). , 17; , 24.

5.11 , . , - (. . 5.13) . , 5.12. , .

5.11 ( )

, , , , , , , .

, , (. 5.13). , ,

typedef struct { int size; int val; } Item;

, N Item. () , , , .

int knap(int cap)

{

int i, space, max, t;

for (i = 0, max = 0; i < N; i++)

if ((space = cap-items[i].size) >= 0)

if ((t = knap(space) + items[i].val) > max)

max = t;

return max;

}

5.13 - .

, 5.11. . , , .

5.12 ( )

, 5.11, . , , ( ). , : itemKnown[M] , M-itemKnown[M].size, , itemKnown[M-items[M].size] ..

int knap(int M)

{

int i, space, max, maxi = 0, t;

if (maxKnown[M]!= unknown) return maxKnown[M];

for (i = 0, max = 0; i < N; i++)

if ((space = M-items[i].size) >= 0)

if ((t = knap (space) + items [i].val) > max)

{ max = t; maxi = i; }

maxKnown[M] = max; itemKnown[M] = items[maxi];

return max;

}

5.14 -

, , .

 

, , , .

, , , , .

, NM. , , ; .

. , , , , , . , , , .

; . ,

;

;

.

, , . , , , , , , , ( ) ( ). , 64- , . . ; , .

, , .

.

1. :

1) : ;

2) : , .

2. :

1) : ;

2) : .

3. :

1) : i- 2n-1 ;

2) : n x 2n , n- .

4. , :

1) 3, 6, 9, : PN:

, N ≥ 1, P0 = 0.

2) 2, 5, 8,: CN:

, N ≥ 1, C0 = 1.

3) 1, 4, 7,: ,

 

.

1. .

2. .

3. , , , .5.1.

4. , , . , , . :

//

template <class Item>

class STACK

{

// ,

Item *s;

 

//

int N;

public:

// - STACK

STACK(int maxN = 1000)

{

s = new Item[maxN]; N = 0;

}

 

//

int empty() const

{

return N == 0;

}

}

5. .

 



<== | ==>
IEC 61131-3 | ] ! ,, [5__Consol.xls] Ceecp1! $B$3:$F$7
:


: 2016-09-03; !; : 1564 |


:

:

, .
==> ...

1841 - | 1728 -


© 2015-2024 lektsii.org - -

: 0.168 .