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

Непонятная рекурсия - C++

Восстановить пароль Регистрация
 
xillion
0 / 0 / 0
Регистрация: 12.08.2011
Сообщений: 4
27.08.2011, 15:16     Непонятная рекурсия #1
Привет всем! нужна небольшая помощь в разьяснении кода.
Дано задание составить прогу:
y=3+6+9+..3*N - составить программу через рекурсию.
Дали исходный код, он работает. Но хотелось бы понять точную мысль его работы. Почему он написан именно так, и можно ли написать как-то по другому.
...
C++
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <conio.h>
#include <math.h>
float function(int n)
{ if (n<36) return sqrt(n+function(n+3));
   else return 0;
}
int main()
{ printf("y=%.8f\n",function(3)); getch(); }
Благодарю за внимание,и заранее спасибо если обьясните)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2011, 15:16     Непонятная рекурсия
Посмотрите здесь:

C++ непонятная ошибка
C++ Непонятная ошибка
Непонятная ошибка!? C++
C++ непонятная строка !!!
Непонятная ошибка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 15:20     Непонятная рекурсия #2
Странный у вас код, я бы так написал:

C++
1
2
3
4
5
6
7
8
9
10
11
long Sum(long i)
{
   return i ? 3*i + Sum(i - 1): 0;
}
 
int main()
{
   std::cout << Sum(5);
   std::cin.get();
   return 0;
}
Ваша программа, чтобы запутать кого-то
xillion
0 / 0 / 0
Регистрация: 12.08.2011
Сообщений: 4
27.08.2011, 15:25  [ТС]     Непонятная рекурсия #3
Thinker, спасибо, у меня вопрос к вашему коду:
"...return i ? .. : 0 ...
можно ли знак вопроса заменить на что-то другое? или что знак вопроса означает, я просто больше с чистым си знаком.
и что значит " .. : 0.. "
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.08.2011, 15:27     Непонятная рекурсия #4
Тернарный оператор. Он и в си есть.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 15:28     Непонятная рекурсия #5
Цитата Сообщение от xillion Посмотреть сообщение
Thinker, спасибо, у меня вопрос к вашему коду:
"...return i ? .. : 0 ...
можно ли знак вопроса заменить на что-то другое? или что знак вопроса означает, я просто больше с чистым си знаком.
и что значит " .. : 0.. "
Это логический оператор с тремя операндами. Можно и так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double Sum(int i)
{
   if (i > 0)
      return 3*i + Sum(i-1);
   else
      return 0;
}
 
int main()
{
   std::cout << Sum(5);
   std::cin.get();
   return 0;
}
xillion
0 / 0 / 0
Регистрация: 12.08.2011
Сообщений: 4
27.08.2011, 15:30  [ТС]     Непонятная рекурсия #6
Я просто данный оператор не практиковал.
Огромное вам спасибо)) Попрактикую данный оператор)))
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 15:31     Непонятная рекурсия #7
Цитата Сообщение от xillion Посмотреть сообщение
Я просто данный оператор не практиковал.
Огромное вам спасибо)) Попрактикую данный оператор)))
Не совсем, посмотрите аналог выше без ? :
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 15:34     Непонятная рекурсия
Еще ссылки по теме:

C++ Непонятная ошибка
непонятная ошибка C++
C++ непонятная ошибка

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

Или воспользуйтесь поиском по форуму:
xillion
0 / 0 / 0
Регистрация: 12.08.2011
Сообщений: 4
27.08.2011, 15:34  [ТС]     Непонятная рекурсия #8
Все,понял вашу мысль. Еще раз спасибо за помощь!
Yandex
Объявления
27.08.2011, 15:34     Непонятная рекурсия
Ответ Создать тему
Опции темы

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