Professional Documents
Culture Documents
Advanced C Programming - Recursion
Advanced C Programming - Recursion
( 102)
&
(1)
( )
.
,
21 20 10 8 4 5 ,
21 20 8 10 -1 4 5 10
5+4+(-1)
( ) (
),
(2)
1:
(for, while)
(global) (static)
2: 2 ,
3: ,
(, 1-6 )
( ).
,
(3)
( )
(4)
:
(5)
1
} else {
(*sum) += numsVector[pos - 1];
largerThanAllNext(numsVector, --pos, sum);
}
} else {
printf("There is no such element\n");
}
}
(6)
2
} else {
largerThanAllNext(numsVector, pos - 1, sum + numsVector[pos]);
}
} else {
printf("There is no such element\n");
}
}
(7)
3
else
largerThanAllNext(numsVector, pos - 1, N, sum + numsVector[pos]);
}
(8)
1:
/* numsVector: */
/* nums: */
int sum = numsVector[nums-1];
largerThanAllNext( numsVector, nums-1, &sum)
2:
/* numsVector: */
/* nums: */
largerThanAllNext(numsVector, nums - 2, numsVector[nums - 1]);
3:
/* numsVector: */
/* nums: */
largerThanAllNext(numsVector, nums 1, nums, 0);
(1)
(
0, )
,
.
.
, 5 4 6 15 25 46
5*6*25=750 4*15*46=2760
2 ,
(2)
1:
(for, while)
(global) (static)
2: , (,
2-4 )
.
( ).
,
(3)
,
(4)
:
(5)
,
(6)
int maxOddOrEven(struct node *p, int odd, int even, int counter) {
if (p == NULL) {
printf("\nEvent product is: %d, Odd product is:%d\n", even, odd);
return (odd > even) ? odd : even;
}
if (counter % 2 == 0)
even *= p->value;
else
odd *= p->value;
return maxOddOrEven(p->next, odd, even, counter + 1);
}
(7)
(7)
1
/* head: */
int max;
max = maxOddOrEven(head, 1, 1, 0);
printf( "\nThe max product is: %d\n", max);
2
/* head: */
int max;
max = maxOddOrEven(head, 1, 1);
printf( "\nThe max product is: %d\n", max);
(1)
2 ( )
( ). ,
2 5 8 10 80 3 8,10, 80,
8*10=80.
:
,
,
(
2)
(2)
1:
(for, while)
(global) (static) .
2: ,
(, 1-6 )
.
( ).
,
(3)
( )
(4)
:
(5)
(6)
:
/* numsVector: */
/* nums: */
checkThreeNums(numsVector, 0, nums);