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

Рекурсия и массивы - C++

Восстановить пароль Регистрация
 
Rusl_v
 Аватар для Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
11.03.2012, 01:58     Рекурсия и массивы #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
using namespace std;
void func(int [],int);
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    int a[10]={32,27,64,18,95,14,90,70,60,37};
 
    cout<<"Значение массива:"<<endl;
    func(a,10);
    cout<<endl;
    system("pause");
    return 0;
}
void func(int b[],int size){
    if (size>0){
        func(&b[1],size-1);
        cout<<b[0]<<" ";
    }
}
Объясните пожалуйста как она робит!!!

Как я понимаю:
1.В ф-цию передаётся массив(т.е. адрес на 1 эл-т) и кол-во эл-тов
2.Вызывается рекурсивная ф-ция которой передаётся по ссылке элемент с индексом 1 (&b[1] )
3.пока size>0 передаётся всё время элемент с индексом 1 что ли???А печатается получается эл-т с индексом 0???
Помогите разобратся с
func(&b[1],size-1);
cout<<b[0]<<" ";

Приблизительно я понимаю что когда size будет 1 начнётся печать с последних эл-тов массива,но я не могу понять как (&b[1] ) перебирает эл-ты в рекурсии
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 01:58     Рекурсия и массивы
Посмотрите здесь:

Динамические массивы и рекурсия C++
Рекурсия C++
C++ S.O.S.(массивы\строки\рекурсия)
РЕкурсия C++
Рекурсия!!!! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,592
Записей в блоге: 17
11.03.2012, 02:16     Рекурсия и массивы #2
C++
1
2
func(&b[1],size-1);
    cout<<b[0]<<" ";
Выполняется приблизительно также как

C++
1
2
3
4
5
         cout<<b[size-1]<<" ";
        //     ...
     cout<<b[2]<<" ";
  cout<<b[1]<<" ";
cout<<b[0]<<" ";
Попробуй рассматривать &b[1] как (b+1) a b[0] как *b

Приблизительно я понимаю что когда size будет 1 начнётся печать с последних эл-тов массива,но я не могу понять как (&b[1] ) перебирает эл-ты в рекурсии
Оно как бы не перебирает их- оно передает следующий элемент в ф-цию....
Rusl_v
 Аватар для Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
11.03.2012, 12:26  [ТС]     Рекурсия и массивы #3
Прочитавши ещё раз про передачу массивов ф-ции,я понял так.
C++
1
void func(int b[],int size)
- ф-ция принимает адрес на первый эл-т массива.

C++
1
func(&b[1],size-1);
-рекурсивной ф-ции передаётся адрес на 1 индекс массива(т.е. на 2 эл-т),т.е. ф-ция уже не увидит b[0] который равен 32,и т.д. происходит пока size>0,а потом начинается печать с последних эл-тов массива.
Получается для первого вызова рекурсивной ф-ции нулевой индекс массива равен 1 индексу массива в ф-ции main к примеру

Правильный ход мыслей?)
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,592
Записей в блоге: 17
11.03.2012, 13:08     Рекурсия и массивы #4
если b массив то b- это указатель на первый элемент тобиш b[0], указатель на второй элемент b+1 т.е b[1] итд.
- ф-ция принимает адрес на первый эл-т массива.
Я б сказал так: ф-ция просто принимает адрес какой ей передают (точнее сказать указатель)
Yandex
Объявления
11.03.2012, 13:08     Рекурсия и массивы
Ответ Создать тему
Опции темы

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