Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2010, 17:04   #1
Morkonwen
Пользователь
 
Регистрация: 27.06.2010
Сообщений: 44
По умолчанию Странность с рекурсией

Код:
 
int TekRang=4;

double RMDetWithDev2()
{
 TekRang--;
double sum=0;

    if (TekRang==1) return 1;

    sum+=1*RMDetWithDev2();

  TekRang++;

  return sum;
}




main(){
 double zna;
zna=RMDetWithDev2();

}
Простой пример, но значение zna равно какому то бреду, хотя функция возвращает 1! в чем дело то?
Morkonwen вне форума Ответить с цитированием
Старый 22.08.2010, 17:59   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>

int TekRang=4;

double RMDetWithDev2()
{
 TekRang--;
 double sum=0;
 if (TekRang==1) return 1;
 sum+=1*RMDetWithDev2();
 TekRang++;
 return sum;
}

int main()
{
 double zna;
 zna=RMDetWithDev2();
 printf("%lf\n",zna);
 getch();
 return 0;
}
Dev-C++. Выводит, как и должно, 1.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 22.08.2010, 18:07   #3
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Все нормально, g++.
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 22.08.2010, 18:29   #4
Morkonwen
Пользователь
 
Регистрация: 27.06.2010
Сообщений: 44
По умолчанию

прикольно, что если не печатать, а смотреть через вотчлист, то бред, а если напечатать то все ок. Borland 6 (Win 7)
Morkonwen вне форума Ответить с цитированием
Старый 22.08.2010, 18:42   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Насколько я понимаю, вы смотрите значение переменной ПЕРЕД обработкой строки, т.е. когда она забита мусором. Как только строчка выполнится (т.е. все функции рекурсивно вызовутся и завершатся, а итоговое значение присвоится переменной), программа сразу же завершится не дав вам посмотреть что произошло в последней строчке.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 22.08.2010, 21:48   #6
Morkonwen
Пользователь
 
Регистрация: 27.06.2010
Сообщений: 44
По умолчанию

было бы логично, но нет, там еще одна строчка но в ней эта переменная не используется(функция после всего, смотрю как раз на ней), больше похоже, что компилятор освобождает переменную, если она уже нигде не используется
Morkonwen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странность в Exel avermedia Microsoft Office Excel 5 19.04.2010 13:36
Странность с пользовательской функцией motorway Microsoft Office Excel 10 24.02.2010 01:36
Странность в условии k1r1ch Общие вопросы Delphi 18 03.11.2009 12:43
Странность POST-запроса Voody Работа с сетью в Delphi 4 21.07.2009 20:39
String - странность или кривые руки elsin Общие вопросы Delphi 12 29.01.2009 02:17