Ответ:
Объяснение:
#include<iostream>
using namespace std;
//добавлен фиктивный 0-й элемент, чтобы нумерация была как
//в задании (в с++ нумеровать массивы можно только с 0)
int arr[16] = {0, 10, 22, 16, 11, 45, 25, 25, 4, 10, 7, 8, 25, 10, 1, 9};
// чтобы найти сумму в поддереве вершины i, нужно вызвать
// recurrent_sum(i);
int recurrent_sum(int current){
//условие выхода из рекурсии
if(current > 15){
return 0;
}
return arr[current] + recurrent_sum(2 * current) + recurrent_sum(2 * current + 1);
int even_counter(int current){
return (arr[current] % 2 == 0 ? 1 : 0) + even_counter(2 * current) + even_counter(2 * current + 1);
int main(){
//проверяем, что всё работает.
cout << recurrent_sum(1) << endl; //228
cout << even_counter(1) << endl; //7
Copyright © 2024 SCHOLAR.TIPS - All rights reserved.
Answers & Comments
Ответ:
Объяснение:
#include<iostream>
using namespace std;
//добавлен фиктивный 0-й элемент, чтобы нумерация была как
//в задании (в с++ нумеровать массивы можно только с 0)
int arr[16] = {0, 10, 22, 16, 11, 45, 25, 25, 4, 10, 7, 8, 25, 10, 1, 9};
// чтобы найти сумму в поддереве вершины i, нужно вызвать
// recurrent_sum(i);
int recurrent_sum(int current){
//условие выхода из рекурсии
if(current > 15){
return 0;
}
return arr[current] + recurrent_sum(2 * current) + recurrent_sum(2 * current + 1);
}
int even_counter(int current){
if(current > 15){
return 0;
}
return (arr[current] % 2 == 0 ? 1 : 0) + even_counter(2 * current) + even_counter(2 * current + 1);
}
int main(){
//проверяем, что всё работает.
cout << recurrent_sum(1) << endl; //228
cout << even_counter(1) << endl; //7
return 0;
}