![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
n199a |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
Очередное число Фибоначчи зависит только от двух предыдущих, которые будем
хранить в переменных f1 и f2. Сначала примем f1=1 и f2=0, затем вычисляем следующее число Фибоначчи и записываем его в переменную x. Теперь значение f2 уже не нужно и мы скопируем f1 в f2 и x в f1. Приводится код:
Вопросы: 1) Зачем писать x = f1 + f2, если можно написать x = f1? 2) Зачем писать f1 = x ? Если разобраться, то это код только возвращает в функцию Fib2 единицу (n-2) раз. В подтверждение: Допустим n = 5. i = 2, пока 2 < 5, то будем добавлять к 2 по 1 последовательно, предварительно выполнив: х = 0 + 1; f2 = 1; 1 = x; т.е. 1 будет всегда равно 1 и х будет возвращать число 1 в функцию Fib2 3 раза. Получается 1 будет умножаться на 1 три раза. В чем смысл? |
|||
|
||||
Arantir |
|
||||||||||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: нет Всего: 55 |
Что это должно означать? o_O true, без сомнения...
не сходится с вашими словами... А где там умножение? Добавлено @ 01:45 Если так сделать, то ничего не получится... Но если Вам показалось, что это можно реализовать с помощью всего-лишь двух переменных, то это действительно возможно:
Это сообщение отредактировал(а) Arantir - 30.5.2013, 01:46 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||||||||
|
|||||||||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Вообще-то, "равно" - это оператор присваивания:
Поэтому последовательность операторов переводится как:
Как раз затем, чтобы поменять значение переменной f1 на значение переменной x (если x равнялось пяти, то после f1 = x; значением f1 также становится пять, хотя до присваивания могло равняться чему угодно)))) x = f1 + f2 и x = f1 дают совершенно разный результат: в первом случае значением переменной x становится сумма значений переменных f1 и f2; во втором - только лишь значение переменной f1. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
n199a |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
Смотрите. Пусть n равно 5. И так, что происходит в цикле for: Получается, что в независимости от того, чему будет сначала равна переменная x, в итоге получим x = 1. Т.е. только единица будет возвращаться в Fib2. ******************************************* Это значит, что в итоге х получилось равной единице. Писал не как код C, а просто математическое выражение. Добавлено @ 18:11
Я ещё не учил про то, как используется <<, по этому не могу ничего сказать. Как получилось это:
Добавлено @ 18:14 feodorv, про это:
мне знакомо. Вы не так поняли то, что я писал. Акцент делается на слово тогда: Зачем ТОГДАписать приравнивание? Т.е.:
Это сообщение отредактировал(а) n199a - 30.5.2013, 18:16 |
||||||||||
|
|||||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
n199a |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.11.2011 Репутация: нет Всего: нет |
||||
|
||||
Arantir |
|
||||||||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: нет Всего: 55 |
Это значения перемененных по мере выполнения цикла. И они явно указывают на ложность вашего утверждения о том, что
Да потому что на второй итерации f2 уже не будет нолем. Вы вообще понимаете, что там цикл? И это не рекурсия, нету никакого "возвращает 3 раза".
Потому что это про-гра-мми-ро-ва-ни-е... Делать отдельный блок кода на случай, если b = 0 это тупо. Код в цикле делают таким, чтобы он на любой итерации правильно работал. Это сообщение отредактировал(а) Arantir - 30.5.2013, 18:45 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||||||
|
|||||||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Нет, не получается ![]() Получилось как раз в ходе выполнения цикла. Как видите, x не равно 1. Гм. Просмотрел Ваши ранние сообщения, слово "тогда" не обнаружено... А printf Вам знаком? Можно и через printf переписать... Сожалею, что не правильно Вас понял. Сожалею, что не могу понять Вас правильно ![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
хотел написать пару слов, но почитав как объяснения умельцев объяснений разбились о стену непонимания результата трех присваиваний...
пока понаблюдаю матч с трибуны))) Добавлено через 7 минут и 32 секунды не, скучно в зрителях ![]() n199a, составьте таблицу значений переменных в конце каждого шага цикла, вручную вычисляя значения я начну, вы продолжайте начальные значения f1=1 f2=0 x=? i x f2 f1 ------------------- 2 1 1 1 когда составите (и тут же, думаю, все поймете), посмотрите что писал вам в самом начале Arantir |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |