Форум программистов, компьютерный форум CyberForum.ru

Объясните пожалуйста. Нюансы программы с рекурсией - C++

Восстановить пароль Регистрация
 
nbalexey
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 9
21.12.2013, 07:29     Объясните пожалуйста. Нюансы программы с рекурсией #1
Добрый день. Просьба, объясните пару нюансов программы. всё работает, но не могу разобраться для чего нам нужны вот эти строки, и что они делают? Задание: С помощью рекурсивной функции вычислить сумму элементов одномерного массива.
C++
1
2
3
4
int sum(int *a, int n)
{
 if (n==1) return a[0];
 else return a[n-1]+sum(&a[0],n-1);
Вот сама программа!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <stdlib.h>
#define kol 6
 
int sum(int *a, int n)
{
 if (n==1) return a[0];
 else return a[n-1]+sum(&a[0],n-1);
}
 
void main()
{
 int x[kol],summa;
 clrscr();
 randomize();
 for(int i=0;i<kol;i++)
 printf("%d",x[i]=rand()%10);
 summa=sum(&x[0],kol);
 printf("\n : %d ",summa);
 getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2013, 07:29     Объясните пожалуйста. Нюансы программы с рекурсией
Посмотрите здесь:

объясните пожалуйста C++
C++ Объясните пожалуйста ход работы программы
C++ Объясните пожалуйста код и ход работы программы на С++
Объясните, пожалуйста, действия программы C++
C++ Объясните пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Amandosov
Знаток
156 / 156 / 65
Регистрация: 18.11.2012
Сообщений: 411
Записей в блоге: 2
21.12.2013, 07:44     Объясните пожалуйста. Нюансы программы с рекурсией #2
Считает сумму с конца
C++
1
2
3
4
5
int sum(int *a, int n)
{
*if (n==1) return a[0];/* если n==1, то есть если первый элемент, тогда заканчивается рекурсия и возвращает последнюю оставшуюся элемент*/
*else return a[n-1]+sum(&a[0],n-1);./* а в других случаях, возвращает сумму элемента(a[n-1]) и рекурсию для этого элемента*/
}
nbalexey
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 9
21.12.2013, 09:10  [ТС]     Объясните пожалуйста. Нюансы программы с рекурсией #3
спасибо. а объяснение всей программы можно?

Добавлено через 46 минут
http://forum.ixbt.com/topic.cgi?id=40:737
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.12.2013, 10:23     Объясните пожалуйста. Нюансы программы с рекурсией #4
Перепишите рекурсию вот так:
C++
1
2
3
int sum(const int a[], int n) {
    return n < 0 ? 0 : a[n] + sum(a, n - 1);
}
Добавлено через 2 минуты
Цитата Сообщение от nbalexey Посмотреть сообщение
#define kol 6
Для этого существуют константы.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
21.12.2013, 11:06     Объясните пожалуйста. Нюансы программы с рекурсией #5
Цитата Сообщение от outoftime Посмотреть сообщение
Перепишите рекурсию вот так:
И вылететь за границы массива?
nbalexey
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 9
21.12.2013, 11:17  [ТС]     Объясните пожалуйста. Нюансы программы с рекурсией #6
спасибо. а если указатели убрать и без них сделать, как получится?
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
21.12.2013, 11:21     Объясните пожалуйста. Нюансы программы с рекурсией #7
Цитата Сообщение от nbalexey Посмотреть сообщение
а если указатели убрать и без них сделать, как получится?
Откуда и куда убрать? Имя массива есть указатель.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.12.2013, 11:37     Объясните пожалуйста. Нюансы программы с рекурсией #8
Цитата Сообщение от 0x10 Посмотреть сообщение
И вылететь за границы массива?
Откуда вы это взяли?
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
21.12.2013, 11:44     Объясните пожалуйста. Нюансы программы с рекурсией #9
Цитата Сообщение от outoftime Посмотреть сообщение
int sum(const int a[], int n) {
* * return n < 0 ? 0 : a[n] + sum(a, n - 1);
}
В массиве из n элементов обращение к a[n].
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.12.2013, 11:50     Объясните пожалуйста. Нюансы программы с рекурсией #10
0x10, Кто сказал что в массиве n элементов если мы обращаемся по индексу n?
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
21.12.2013, 11:52     Объясните пожалуйста. Нюансы программы с рекурсией #11
Цитата Сообщение от outoftime Посмотреть сообщение
Кто сказал что в массиве n элементов если мы обращаемся по индексу n?
При такой сигнатуре функции самое ожидаемое назначение аргумента n - размерность массива. Если же от программиста требуется передать не количество элементов, а индекс последнего, то у функции неинтуитивный интерфейс.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.12.2013, 12:06     Объясните пожалуйста. Нюансы программы с рекурсией #12
0x10, Уважаемый, это рекурсия.

Добавлено через 1 минуту
C++
1
2
template<size_t N>
int sum(const int a[N]) { return sum(a, N - 1); }
Вот вам точка входа если хотите.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
21.12.2013, 12:08     Объясните пожалуйста. Нюансы программы с рекурсией #13
С точки входа и надо было начинать.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.12.2013, 12:17     Объясните пожалуйста. Нюансы программы с рекурсией #14
0x10, у ТС нету точки входа и это не проблема.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2013, 12:21     Объясните пожалуйста. Нюансы программы с рекурсией
Еще ссылки по теме:

Объясните пожалуйста! C++
Программа которая выводит два наибольших числа из десяти введенных. Пожалуйста объясните суть работы программы C++
C++ Ребята, объясните пожалуйста каждую строку этой программы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
0x10
21.12.2013, 12:21     Объясните пожалуйста. Нюансы программы с рекурсией
  #15

Не по теме:

В любом случае смысл разделения одной функции на две от меня ускользает.

Yandex
Объявления
21.12.2013, 12:21     Объясните пожалуйста. Нюансы программы с рекурсией
Ответ Создать тему
Опции темы

Текущее время: 12:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru