Найдите сумму 1 2 3 n, где число n вводится пользователем с клавиатуры
Обновлено: 21.11.2024
Компьютерная программа представляет собой набор инструкций (также называемых кодом), данных компьютеру для выполнения какой-либо задачи, которая может быть любой: от суммирования чисел от 1 до 10 до моделирования климата. Когда компьютер следует инструкциям, данным в программе, мы говорим, что компьютер выполняет программу. Есть много разных способов написать эти инструкции для компьютера (мы говорим о программировании на разных языках) — в этой статье мы будем использовать язык C++. По его окончанию вы сможете писать свои собственные программы для выполнения основных математических и научных задач.
Наша первая программа на C++
Наша первая программа на C++ скажет компьютеру распечатать текст "Hello world!". Вот он (не волнуйтесь, он будет объяснен построчно).
Чтобы компьютер мог запустить эту программу, она должна быть сначала скомпилирована компилятором (это означает ее перевод с языка C++ на родной язык машинного кода компьютера). Есть полезный онлайн-ресурс codepad.org, который делает для нас шаги по компиляции и запуску программы. Перейдите на этот веб-сайт, выберите параметр «C++» для языка и скопируйте и вставьте (или, что еще лучше, введите) программу выше в текстовое поле, прежде чем нажать кнопку «Отправить». Если вы ввели текст правильно, вы должны увидеть следующее для вывода:
Если этого не произошло, возможно, вы неправильно вошли в программу — попробуйте еще раз.
Чтобы понять, что происходит, давайте рассмотрим структуру программы.
Эти первые две строки сообщают компилятору о ряде доступных функций. Функция — это блок кода, который в данном случае уже существует в памяти компьютера и готов к использованию. Пока вам не нужно точно понимать, что означают эти строки; только то, что они должны быть помещены в начало большинства программ на C++, которые вы будете писать. В этой программе мы хотим использовать функцию cout, которая выводит текст.
Этот тип структуры обозначает функцию в программе, называемую "основной". Это специальная функция; мы можем (и позже будем) определять функции с другими именами, но компьютер будет искать эту функцию, чтобы начать следовать начальным инструкциям, которые мы помещаем в скобки (они показывают, где функция начинается и заканчивается). Позже мы подробнее опишем синтаксис функции.
Это строка комментария. Когда компилятор увидит "//", он будет игнорировать все, что идет после этого, до конца строки. Добавление этого текста не влияет на поведение программы, но может быть полезно, когда человек хочет прочитать и понять код позже.
Например, предположим, что мы объявили целочисленную переменную с именем «возраст». Выражение age >= 18 имеет логическое значение и истинно, если возраст $\ge$ 18, и ложно в противном случае. Аналогично, мы могли бы написать возраст > 17. Мы можем сохранить результат этого выражения в логической переменной. Вот пример программы:
Попробуйте запустить программу. Попробуйте изменить значение age, а также попробуйте другие операторы сравнения (например, попробуйте заменить >= одним из , 17 — допустимый фрагмент кода C++, и всегда имеет значение false). Мы также можем комбинировать выражения сравнения так же, как мы комбинировали логические значения вместе с && и ||. Что делает следующий фрагмент кода?
Этот код также показывает, где еще используются скобки < >. Они похожи на круглые скобки ( ) в математическом выражении, таком как (((2+3)*5)-4)*(3-4). Они должны быть вложены друг в друга и должным образом сопоставляться — например, )2+(3*7)+3( не является допустимым математическим выражением. Каждый раз, когда < появляется в коде C++, за ним нужно следовать где-то позже с помощью соответствующего >. Мы можем объединить операторы if таким образом, например:
Мы также можем расширить операторы if до блока кода if-else. Это имеет общую форму if ( expr1 ) < code1 > else if ( expr2 ) < code2 >. else if ( exprN ) < codeN >else (но возможны многие варианты). Компьютер по очереди проверит каждое выражение expr1, expr2, ., чтобы убедиться, что какое-либо из них истинно. Если это правда, то код внутри скобок будет выполнен, и дальнейшие выражения не будут проверяться. Если ни одно из выражений не является истинным, то выполняется код в последних скобках (lastCode выше). Любая из частей else if или else может быть исключена, чтобы также получить корректный код. В следующем примере программы показано их использование.
При запуске программы отображается текст "x меньше y". Мы могли бы удалить последнюю часть else, чтобы создать корректную программу на C++, которая не будет отображать никаких результатов при запуске (поскольку ни одно из выражений x > y или x == y i> верно), например:
Или мы могли бы удалить среднюю часть "else if", чтобы выполнялся либо первый код, либо второй код.
Упражнение. Напишите программу, определяющую переменную x с некоторым начальным значением и оператор if-else, выводящий, является ли x нечетное или четное.
Циклы
Циклы — это следующая важная концепция в программировании. C++ позволяет многократно выполнять блок кода до тех пор, пока не будет достигнуто какое-либо условие (например, пока значение целочисленного счетчика не достигнет 10).
Первый тип циклов — это цикл while. Чтобы использовать это в программе на C++, мы вставляем код формы
- Если выражение ложно, то пропустите код внутри скобок < >и продолжите работу с программой.
- В противном случае выполните код в квадратных скобках < >и снова перейдите к шагу 1.
Поэтому код в квадратных скобках < >будет выполняться повторно, пока выражение не станет ложным.
Давайте рассмотрим пример. Попробуйте запустить следующую программу:
Упражнение: напишите программу, которая выводит числа от 0 до 9 по порядку, а затем обратно до 0. Вам понадобятся два цикла while.
На самом деле такое использование цикла while (где мы увеличиваем переменную счетчика каждый раз, пока она не достигнет определенного значения) происходит так часто, что в C++ есть специальный способ записи — цикл for. Общая форма:
Давайте рассмотрим пример цикла for, суммирующего числа от 0 до 10 и выводящего значение:
Упражнение: Измените приведенную выше программу:
- Таким образом, он суммирует квадраты от 0 до 10.
- Добавьте целочисленную переменную с именем N с некоторым начальным значением (например, 100) и измените код так, чтобы он суммировал квадраты от 0 до N. ли>
Гипотеза Коллатца утверждает, что следующий процесс всегда останавливается для всех начальных значений n:
- Возьмите целое число n больше 0.
- Если n четное, уменьшите его вдвое. В противном случае установите значение 3n+1.
- Если n теперь имеет значение 1, остановитесь. В противном случае перейдите к шагу 2.
Упражнение: напишите программу на C++ для проверки гипотезы Коллатца, которая выводит n на каждой итерации (мы даем программу решения ниже, но попробуйте сначала написать ее!).
Упражнение. Напишите программу на C++, реализующую алгоритм Евклида.
Функции
В простейшем случае функция — это способ группировки набора инструкций, чтобы их можно было многократно выполнять. У каждой функции есть имя (у них те же правила, что и у имен переменных, поэтому они чувствительны к регистру; разрешены буквы, цифры и _, и они не могут начинаться с цифры). В начале программы на C++ мы «объявляем» функцию, которая сообщает компилятору, что она существует (иначе, когда встречается имя функции, компилятор не знал бы, что оно означает). Затем где-то в программе мы «определяем» функцию, т. е. пишем инструкции для функции. Когда мы хотим выполнить инструкции в функции, мы вызываем ее, записывая ее имя (как будет видно).
Давайте рассмотрим пример. Мы пишем функцию countToTen, которая выводит числа от 1 до 9. Во-первых, нам нужно включить следующую строку кода где-то в верхней части программы, чтобы определить функцию:
Ключевое слово void говорит о том, что функция не возвращает значение. Подробнее об этом чуть позже. Вскоре будет объяснено использование символа () и, конечно же, точки с запятой; требуется в конце инструкции.
И чтобы определить функцию, мы включаем следующий блок кода (обратите внимание, что на этот раз мы не ставим точку с запятой в конце первой строки):
Здесь // код заменяется кодом, который будет выполняться при вызове функции. Как видите, форма очень похожа на out int main() — это потому, что «main» на самом деле является специальной функцией, которую вызывает компьютер. Когда мы хотим вызвать функцию, мы пишем countToTen();. Давайте посмотрим на полную программу, которая дважды вызывает эту функцию. Попробуйте запустить его.
Они называются функциями, потому что могут вести себя как математические функции — они могут иметь входные значения и/или выходные значения.
Чтобы объявить функцию с набором входных переменных (которые могут быть любым из типов переменных, которые мы видели до сих пор), мы перечисляем эти типы в скобках ( ) в объявлении, разделенных запятыми (мы также можем включить имена для этих переменных, которые полезны для описательных целей).
Давайте изменим приведенную выше функцию countToNine, чтобы она имела входное значение (которое мы называем N) и печатала числа от 1 до N. Мы объявляем функцию следующим образом (изменив ее имя):
Мы аналогичным образом определяем функцию, заменив 9 в цикле for на N. Чтобы вызвать функцию со значением, скажем, 5, напишем «countToN(5);». Если у нас есть целочисленная переменная с именем x, мы можем использовать значение x в качестве входных данных, написав «countToN(x);».Давайте соберем это вместе, чтобы сформировать полную программу — попробуйте угадать, что делает следующая программа, прежде чем запускать ее!.
Чтобы объявить функцию с выходным значением (которое называется возвращающим значение), мы заменяем ключевое слово void типом значения. Например, если бы мы хотели вернуть десятичное число, мы бы заменили void на float. Внутри функции, когда мы хотим вернуться из функции туда, откуда функция была вызвана, мы пишем "return value;", где value заменяется возвращаемым значением (например, 5 или x).
Давайте создадим функцию с именем gcd, которая имеет два входных значения (которые мы будем называть a и b) и (грубо) вычисляет их наибольший общий делитель и возвращает значение. Как описано выше, мы объявляем функцию как
И для определения функции мы используем аналогичный формат (на этот раз снова без точки с запятой в конце первой строки):
Упражнение: Как и почему работает алгоритм, приведенный в приведенной выше функции?
Для вызова функции мы пишем, например, gcd( 168, 120 ). Затем это обрабатывается как целое число, значением которого является возвращаемое значение, поэтому мы можем рассматривать его как любое другое целое число. Например, мы можем написать «int x = gcd (168, 120);» чтобы создать целое число с этим значением. Или мы могли бы написать "cout
Упражнение: измените код в функции gcd, чтобы она использовала алгоритм Евклида, который более эффективен в вычислительном отношении.
Упражнение. Напишите функцию, которая принимает два целых числа a и b и возвращает значение $a^b$.
Другие математические функции
Мы рассмотрели основные функциональные возможности C++. C++ также поставляется с целым набором предопределенных функций, например, с такими распространенными математическими функциями, как sin, cos и квадратный корень, а также с функциями для генерации случайных чисел.
Общие математические функции
Это содержит новый код — float(rand()) превращает целое число, возвращаемое rand(), в число с плавающей запятой с тем же значением. Это необходимо, так как если мы делим два целых числа, то часть после запятой отбрасывается. Вот пример программы, генерирующей 10 случайных чисел от 0 до 1.
Упражнение. Как бы вы сгенерировали случайное целое число от 1 до 10?
Упражнение. Используйте случайные числа и стрелку Бюффона, чтобы вычислить число Пи.
Проект NRICH направлен на то, чтобы обогатить математический опыт всех учащихся. Чтобы поддержать эту цель, члены команды NRICH работают в самых разных областях, в том числе обеспечивают профессиональное развитие учителей, желающих внедрить сложные математические задачи в повседневную классную практику.
Вы можете использовать простую формулу для суммирования чисел в диапазоне (группе ячеек), но функцию СУММ проще использовать, когда вы работаете с несколькими числами. Например, =СУММ(A2:A6) с меньшей вероятностью содержит опечатки, чем =A2+A3+A4+A5+A6.
В следующей формуле используются два диапазона ячеек: =СУММ(A2:A4;C2:C3) суммирует числа в диапазонах A2:A4 и C2:C3. Вы должны нажать Enter, чтобы получить общее количество 39787.
Чтобы создать формулу:
Введите =СУММ в ячейке, а затем открывающую скобку (.
Чтобы ввести первый диапазон формулы, который называется аргументом (фрагментом данных, необходимых для выполнения формулы), введите A2:A4 (или выберите ячейку A2 и перетащите через ячейку A6).
Введите запятую (,), чтобы отделить первый аргумент от следующего.
Введите второй аргумент, C2:C3 (или перетащите, чтобы выделить ячейки).
Введите закрывающую скобку ), а затем нажмите Enter.
Каждый аргумент может быть диапазоном, числом или ссылкой на одну ячейку, разделенными запятыми.
Совет. Если вам нужно суммировать столбцы или строки чисел рядом друг с другом, используйте функцию автосуммирования для суммирования чисел.
Попробуйте
Если вы хотите поиграть с нашими образцами данных, вот некоторые данные для использования.
Вы можете увидеть, как работает функция СУММ, скопировав следующую таблицу на рабочий лист и вставив ее в ячейку A1.
Описание
Складывает 5, 15 и 1. Текстовое значение "5" сначала преобразуется в число, а логическое значение ИСТИНА сначала преобразуется в число 1.
Складывает значения в ячейках с A2 по A4.
Складывает значения в ячейках с A2 по A4, а затем добавляет к этому результату 15.
Складывает значения в ячейках A5 и A6, а затем добавляет 2 к этому результату. Поскольку нечисловые значения в ссылках не переводятся — значение в ячейке A5 ('5) и значение в ячейке A6 (ИСТИНА) обрабатываются как текст — значения в этих ячейках игнорируются.
Нужна дополнительная помощь?
Вы всегда можете обратиться к эксперту в техническом сообществе Excel или получить поддержку в сообществе ответов.
Вообще говоря, рекурсия — это концепция четко определенной ссылки на себя. Это определение последовательности элементов путем обработки одного или нескольких предшествующих элементов в соответствии с правилом или формулой, включающей конечное число шагов.
В компьютерных науках рекурсия – это метод программирования, использующий функцию или алгоритм, который вызывает сам себя один или несколько раз до тех пор, пока не будет выполнено заданное условие, после чего оставшаяся часть каждого повторения обрабатывается от последнего до первого. р>
Например, давайте рассмотрим рекурсивное определение предков человека:
- Родители — это предки
- Родители любого предка также являются предками рассматриваемого человека.
Мы можем написать псевдокод, чтобы определить, является ли кто-то чьим-то предком.
FUNCTION isAncestor(Person x, Person y):
ЕСЛИ x является родителем y, THEN:
return true
ELSE
return isAncestor(x, y's mom) OR isAncestor (x, y папа)
>
FUNCTION isAncestor(Person x, Person y):
ЕСЛИ x является родителем y, THEN:
вернуть true
ELSE IF x не родился до рождения y, THEN:
return false
ELSE
return isAncestor(x, y мама) OR isAncestor(x, y папа)
>
Важно: у каждой рекурсии должен быть хотя бы один базовый случай, при котором рекурсия не повторяется (т. е. не ссылается сама на себя).
Еще примеры рекурсии:
- Русские матрешки. Каждая кукла сделана из цельного дерева или полая и содержит внутри еще одну матрешку.
- Современная ОС определяет каталоги файловой системы рекурсивным способом. Файловая система состоит из каталога верхнего уровня, а содержимое этого каталога состоит из файлов и других каталогов.
- Большая часть синтаксиса современных языков программирования определяется рекурсивным способом. Например, список аргументов состоит из (1) аргумента или (2) списка аргументов, за которыми следует запятая и аргумент.
Упражнение: дайте рекурсивное определение следующих структур данных:
- Связанный список
- Количество узлов в связанном списке
Определение проблем способами, облегчающими рекурсию
Чтобы разработать рекурсивный алгоритм для данной проблемы, полезно подумать о различных способах, которыми мы можем разделить эту проблему, чтобы определить проблемы, которые имеют ту же общую структуру, что и исходная проблема. Этот процесс иногда означает, что нам нужно переопределить исходную проблему, чтобы упростить решение похожих подзадач.
Некоторые наблюдения: (1) Избегайте, если возможно, рекурсивных функций, которые делают несколько перекрывающихся вызовов самих себя, что приводит к экспоненциальной сложности; и (2) повторение кода может быть достигнуто с помощью рекурсии.
В следующих примерах вы всегда должны спрашивать себя, что такое базовый случай и рекурсивный шаг, отмечать естественность реализации, понимать, как задействована функция замены цикла рекурсии, и, возможно, думать о том, каково время выполнения. и использование пространства.
Пример 1: расчет факториала
Мы знаем, что факториал n (n >= 0) вычисляется как n! = n * (n-1) * (n-2) * . * 2 * 1. Обратите внимание, что произведение (n-1) * (n-2) * . * 2 * 1 равно (n-1)!. Таким образом, мы можем записать выражение как n! = n * (n-1)!, что является рекурсивным выражением вычисления факториала.
Что такое базовый вариант? Что такое рекурсивный шаг?
открытый класс RecursiveFactorial public static void main (String[] args) for (int i = 1; i
Приведенная выше рекурсия называется линейной рекурсией, поскольку она выполняет один рекурсивный вызов за раз. Эквивалент цикла:
public static int factorial(int n) int result = 1;
for (int i = 2; i
Рекурсия и стеки
Давайте внимательно рассмотрим механизм, с помощью которого компилятор фактически реализует рекурсивную программу. В предыдущем примере мы видели, как рекурсия выполняет фазы прямого и обратного хода. Порядок, в котором рекурсивный процесс отступает, является обратным порядку, в котором он идет вперед. Таким образом, может быть выполнено какое-то действие, которое включает вызов чего-то, что было сохранено в прямом процессе. Компилятор использует стек для реализации рекурсии.
- На этапе пересылки значения локальных переменных и параметров, а также адрес возврата помещаются в стек для каждого уровня рекурсии.
- На этапе отката адрес из стека извлекается и используется для возврата к выполнению остальной части кода на вызывающем уровне, а локальные переменные и параметры из стека извлекаются и используются для восстановления состояния этого вызова< /li>
- Возведение в степень.Вычислите x n, используя как итерацию, так и рекурсию. (Предположим, что x > 0 и n >= 0)
Давайте рассмотрим задачу обращения n элементов массива A таким образом, чтобы первый элемент становился последним, второй элемент становился предпоследним и так далее. Мы можем решить эту проблему, используя линейную рекурсию, заметив, что обращение массива может быть достигнуто путем замены местами первого и последнего элементов, а затем рекурсивного обращения оставшихся элементов в массиве.
Алгоритм ReverseArray(A, i, j):
Входные данные: массив A и неотрицательные целые индексы i и < i>j
Вывод: перестановка элементов в A, начиная с индекса i и заканчивая j
if я
- Рекурсивное суммирование элементов массива
- Поиск максимального элемента в массиве A из n элементов с использованием рекурсии
Это стандартная проблема, когда рекурсивная реализация тривиальна, а нерекурсивная почти невозможна.
В головоломке «Ханойские башни» нам дается платформа с тремя колышками, a, b и c, торчащими из Это. На колышке a находится стопка из n дисков, каждый из которых больше предыдущего, так что самый маленький находится вверху, а самый большой — внизу. Задача состоит в том, чтобы переместить все диски со стержня a на c, перемещая по одному диску за раз, чтобы никогда не класть больший диск поверх меньшего. На следующих рисунках приведены примеры начального положения и конечного положения дисков с n = 4. Давайте рассмотрим пример перемещения 4 дисков.
a b c a b c
(источник) (запас) (назначение) (источник) (запас) (назначение)
Подумайте, что такое базовый вариант? Что такое рекурсивный шаг?
На верхнем уровне мы хотим переместить 4 диска из привязки a в c с запасной привязкой b. Мы можем разбить задачу перемещения 4 дисков на три этапа:
- Переместите диск 3 и меньше с колышка a на b, используя c в качестве запасного стержня. Это можно сделать, рекурсивно вызвав ту же процедуру, но вместо этого с 3 дисками. После этой процедуры у нас будет 3 диска меньшего размера на привязке b.
- Переместите диск 4 со штифта a на штифт c. После этой процедуры у нас будет 3 меньших диска на привязке b, диск 4 на привязке c и привязка a пуста.
- Переместите диск 3 и меньше с колышка b на c, используя a в качестве запасного стержня. Опять же, это можно сделать, рекурсивно вызвав одну и ту же процедуру на 3-х дисках с разными источником и местом назначения. После этой процедуры у нас будут все диски на привязке c без нарушения правил.
Псевдокод выглядит следующим образом. Мы вызываем эту функцию для перемещения 4 дисков с помощью MoveDisk(4, a, c, b).
Алгоритм MoveDisk(диск, источник, назначение, запасной), если (диск i> = = 1), затем
переместите диск из исходного в целевой
else
MoveDisk(< i>диск-1, исходный, запасной, целевой) // шаг 1 выше
переместить диск из исходного в целевой // шаг 2 выше
MoveDisk(disk-1, repare< /i>, назначение, источник) // шаг 3 выше
>
Давайте проследим наше решение. Чтобы визуализировать рекурсивный процесс вызова, мы создаем дерево вызовов. Это дерево вызовов для перемещения 3 дисков из привязки a в c.
Обратите внимание, что каждый вызов MoveDisk будет разветвляться на вызовы двух функций, если только это не базовый случай. Если мы хотим переместить n дисков, сколько движений нам потребуется с помощью этой рекурсивной функции?
Предположим, что M(i) представляет количество перемещений дисков, давайте посчитаем, сколько времени потребуется, чтобы переместить n дисков.
- М(1) = 1
- М(2) = 2М(1) + 1 = 3
- М(3) = 2М(2) + 1 = 7
- М(4) = 2М(3) + 1 = 15
- .
- Мы можем предположить, что M(n) = 2 n - 1
Это можно проверить, подключив его к нашей функции.
- М(1) = 2 1 – 1
- M(n) = 2M(n-1) + 1 = 2[2M(n-2) + 1] + 1 = . = 2 k M(n-k) + 2 k-1 + 2 k-2 + . + 2 + 1
- M(n) = 2 n - 1, когда k = n-1 (остановка в базовый вариант)
Версия головоломки с 64 дисками находится в ханойском монастыре, где монахи постоянно работают над решением головоломки. Когда они закончат головоломку, миру придет конец. Теперь вы знаете ответ. Как долго будет существовать мир? примерно 585,442 миллиарда лет. Сейчас Вселенной около 13,7 миллиарда лет.
Последовательность Фибоначчи — это последовательность чисел 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, . Первые два числа последовательности равны 1, а каждое последующее число является суммой двух предшествующих чисел. Мы можем определить функцию F(n), которая вычисляет n-е число Фибоначчи.
Теперь рекурсивный случай: F(n) = F(n-1) + F(n-2).< /p>
Напишите рекурсивную функцию и дерево вызовов для F(5).
Алгоритм Фибоначчи(n), если (n
Приведенная выше рекурсия называется бинарной рекурсией, поскольку она делает два рекурсивных вызова вместо одного. Сколько вызовов необходимо для вычисления k-го числа Фибоначчи? Пусть nk обозначает количество вызовов, выполненных при выполнении.
Это означает, что рекурсия Фибоначчи делает количество вызовов, экспоненциальное относительно k. Другими словами, использование двоичной рекурсии для вычисления чисел Фибоначчи очень неэффективно. Сравните эту проблему с бинарным поиском, который очень эффективен при поиске элементов, почему эта бинарная рекурсия неэффективна? Основная проблема с описанным выше подходом заключается в наличии нескольких перекрывающихся рекурсивных вызовов.
Мы можем вычислить F(n) намного эффективнее, используя линейную рекурсию. Один из способов выполнить это преобразование — определить рекурсивную функцию, которая вычисляет пару последовательных чисел Фибоначчи F(n) и F(n-1), используя соглашение F( -1) = 0.
Алгоритм LinearFib(n) Вход: неотрицательное целое число n
Выход: Пара чисел Фибоначчи (Fn, Fn-1)
если (n
Поскольку каждый рекурсивный вызов LinearFib уменьшает аргумент n на 1, первоначальный вызов приводит к серии n-1 дополнительных вызовов. . Эта производительность значительно быстрее, чем экспоненциальное время, необходимое для двоичной рекурсии. Поэтому при использовании бинарной рекурсии мы должны сначала попытаться полностью разбить задачу на две части или, мы должны быть уверены, что перекрывающиеся рекурсивные вызовы действительно необходимы. Обычно мы можем устранить перекрывающиеся рекурсивные вызовы, используя больше памяти для отслеживания предыдущих значений. На самом деле этот подход является центральной частью метода, называемого динамическим программированием. Давайте используем итерацию для генерации чисел Фибоначчи. Какова сложность этого алгоритма?
public static int IterationFib(int n) if (n
Какой базовый вариант? Что такое рекурсивный случай?
открытый класс TestBinarySearch TestBinarySearch() int[] arr = ;
System.out.println("search(" + 55 + "): " + BinarySearch(arr, 0, arr.length-1, 55));
System.out.println("search(" + 50 + "): " + BinarySearch(arr, 0, arr.length-1, 50));
>
public static void main(String[] args) new TestBinarySearch();
>
int BinarySearch(int[] arr, int start, int end, int x) int mid = (start + end) / 2;
if (arr[mid] = = x) return mid;
если (начало > конец) вернуть -1;
если (приб[середина]
- Суммирование элементов массива с помощью двоичной рекурсии
Недостатки рекурсии
Рекурсия занимает место в стеке. Каждый вызов рекурсивного метода создает новый экземпляр метода с новым набором локальных переменных. Общее используемое пространство стека зависит от уровня вложенности процесса рекурсии и количества локальных переменных и параметров.
Рекурсия может выполнять избыточные вычисления. Рассмотрим рекурсивное вычисление последовательности Фибоначчи.
Подводя итог, следует сопоставить простоту кода, полученного с помощью рекурсии, с его недостатками, описанными выше. Когда возможно относительно простое итеративное решение, это определенно лучшая альтернатива.
Хвостовая рекурсия
Мы можем преобразовать рекурсивный алгоритм в нерекурсивный алгоритм, и в некоторых случаях мы можем сделать это преобразование проще и эффективнее. В частности, мы можем легко преобразовать алгоритмы, использующие хвостовую рекурсию. Алгоритм использует хвостовую рекурсию, если он использует линейную рекурсию и алгоритм выполняет рекурсивный вызов в качестве самой последней операции. Рекурсивный вызов должен быть абсолютно последним, что делает метод. Например, все примеры 1, 2 и 5 представляют собой хвостовую рекурсию, и их можно легко реализовать с помощью итерации.
Либо напишите псевдокод, либо код Java для следующих проблем. Нарисуйте рекурсивную трассу простого случая. Каковы требования к времени работы и пространству?.
Теперь мы можем увидеть, как найти сумму трех чисел в Python.
В этом примере я использовал три входа. Используется тип данных int и оператор «+» для нахождения суммы трех чисел.
Мы видим, что сумма трех входных данных равна 16 на выходе. Вы можете обратиться к приведенному ниже снимку экрана для вывода.
Вот как найти сумму трех чисел в Python.
Программа Python для нахождения суммы n чисел с использованием цикла for
Здесь мы можем найти сумму n чисел, используя цикл for в python.
- В этом примере я ввел данные.Тип данных int используется для суммирования только целых чисел.
- Здесь мы можем взять начальное значение sum = 0. Цикл for используется для номера итерации + 1 используется для увеличения числа до заданного ввода.
- Сумма = сумма + значение используется для нахождения суммы.
- Чтобы получить вывод, я использовал print(sum).
Мы видим, что сумма чисел до 10 равна 55 на выходе. Вы можете обратиться к приведенному ниже снимку экрана для вывода.
Вот как найти сумму n чисел с помощью цикла for в Python.
Программа Python для нахождения суммы n чисел с помощью функции
Здесь мы можем найти сумму n чисел с помощью функции в Python.
- В этом примере я ввел данные. Функция определяется как сумма по умолчанию (n).
- Условие if используется, если входное значение меньше 1, оно само возвращает n, если число больше единицы, выполняется условие else, а затем n добавляется к сумме (n-1).
- Для получения вывода используется print("The sum is: ", sum(num))".
Поскольку на входе 6. Мы видим, что сумма чисел равна 21 на выходе. На снимке экрана ниже показан результат.
Вот как найти сумму n чисел с помощью функции в Python.
Программа Python для нахождения суммы n чисел с использованием цикла while
Теперь мы можем увидеть, как найти сумму n чисел, используя цикл while в Python.
- В этом примере я ввел данные. Условие if используется, если введенное значение меньше 0, тогда отображается print("Введите положительное число").
- Если число больше 0, выполняется условие else, если sum = 0, условие while выполняется, если число больше 0.
- Сумма += input используется для увеличения значения, а input -= 1 используется для уменьшения значения.
На снимке экрана ниже показана сумма чисел в качестве вывода.
Приведенный выше код мы можем использовать для нахождения суммы n чисел с помощью цикла while в Python.
Программа Python для нахождения суммы n чисел с помощью рекурсии
Здесь мы видим, как найти сумму n чисел, используя рекурсию в Python.
-
означает вызов самой функции.
- В этом примере я определил функцию как def recursion(n).
- Используется условие if, если число меньше 9, должно возвращаться само число.
- Если число больше или равно 9, возвращается n + recursion(n – 1).
- Для получения вывода используется print(recursion(n)) .
На приведенном ниже снимке экрана показана сумма чисел до 9 в качестве вывода.
Приведенный выше код мы можем использовать для нахождения суммы n чисел с помощью рекурсии в Python.
Программа Python для нахождения суммы n четных чисел
Теперь мы можем увидеть, как найти сумму n четных чисел в Python
- В этом примере я ввел данные. Начальное значение установлено как total = 0
- Цикл for используется для итерации. Я использовал функцию диапазона().
- Условие if используется как число % 2 ==0 для получения четных чисел.
- print(number) используется для получения четных чисел
- Всего = общее + число используется для нахождения суммы четных чисел.
Выводом является сумма четных чисел. Вы можете обратиться к приведенному ниже снимку экрана для вывода.
Вот как найти сумму n четных чисел в Python.
Программа Python для нахождения суммы n нечетных чисел
Здесь мы видим, как найти сумму n нечетных чисел в Python
- В этом примере я ввел данные. Начальное значение равно total = 0.
- Цикл for используется для итерации. Я использовал функцию диапазона.
- Условие if используется как число % 2! =0, чтобы получить нечетные числа.
- print(number) используется для получения нечетных чисел.
- Всего = общее + число используется для нахождения суммы нечетных чисел.
На выходе мы видим сумму нечетных чисел. Вы можете обратиться к приведенному ниже снимку экрана для вывода.
Этот код мы можем использовать для нахождения суммы n нечетных чисел в Python.
Программа Python для нахождения суммы n простых чисел
Здесь мы видим, как найти сумму n простых чисел в Python.
- В этом примере я ввел данные. Начальное значение установлено как сумма = 0.
- Цикл for используется для итерации. Функция диапазона используется для указания предела диапазона между числами в виде (2, ввод + 1).
- Цикл прерывания используется для завершения текущего цикла и возобновления выполнения на следующем операторе.
- Используется ли условие для проверки того, является ли число простым или нет. Если i не равно num, используется оператор приращения.
- Чтобы получить вывод, я использовал print("Сумма простых чисел до", input, ":", sum).
В качестве результата мы можем увидеть сумму простых чисел с заданным диапазоном. Вы можете обратиться к приведенному ниже снимку экрана для вывода.
Вот как найти сумму n простых чисел в Python.
Программа Python для нахождения суммы первых n чисел
Здесь мы видим, как найти сумму первых n чисел в Python.
- В этом примере я принял ввод, и начальное значение равно 0, так как сумма = 0.
- Цикл for используется для итерации, а функция диапазона используется для нахождения суммы между заданным диапазоном входных данных.
- Ввод + 1 используется для приращения, чтобы добавить числа, которые я использовал sum = sum + num.
- Я использовал print("Результат первых n чисел", сумма) для получения вывода.
На снимке экрана ниже показана сумма первых n чисел в качестве результата.
Приведенный выше код мы можем использовать для нахождения суммы первых n чисел в Python.
Программа Python для нахождения суммы первых n четных чисел
Теперь мы можем увидеть, как найти сумму первых n четных чисел в Python.
- В этом примере я взял ввод, начальное значение равно 0, так как сумма = 0.
- Функция диапазона используется для нахождения суммы между диапазоном чисел, заданных пользователем в качестве входных данных.
- if((i % 2) == 0) используется для проверки того, что заданное число является четным.
- Если число четное, то сумма = сумма + i используется для сложения чисел.
На приведенном ниже снимке экрана показана сумма четных чисел в качестве результата.
Приведенный выше код мы можем использовать для нахождения суммы первых n четных чисел в Python.
Программа Python для нахождения суммы чисел в списке
Теперь мы можем увидеть, как найти сумму чисел в списке в Python
- В этом примере я принял начальное значение 0.
- Список назначается как list = [1, 4, 2, 3, 7]. Цикл for используется для итерации
- Сумма = сумма + список[ele] используется для нахождения суммы чисел из списка.
- Я использовал print("Сумма элементов в списке: ", сумма) для получения вывода.
Мы можем вывести сумму чисел из списка 17. Вы можете обратиться к приведенному ниже снимку экрана для вывода.
Это программа Python для нахождения суммы чисел в списке.
Программа Python для нахождения суммы чисел в строке
Теперь мы можем увидеть, как найти сумму чисел в строке в Python
- В этом примере я взял ввод. Начальное значение равно 0, так как сумма = 0.
- Цикл for используется для итерации, используется условие if, а метод .isnumeric() используется для получения ввода в виде буквенно-цифровых чисел.
- Sum+int(i), здесь int используется только для сложения чисел из буквенно-цифровой строки.
- Я использовал print(sum) для получения вывода.
На приведенном ниже снимке экрана мы видим ввод как 1a2b34, сумма чисел равна 10 в качестве вывода.
Это код для нахождения суммы чисел в строке в Python.
Программа Python для поиска суммы чисел в файле
Теперь мы можем увидеть, как найти сумму чисел в файле в python
- В этом примере я открыл файл как число, которое содержит числа. Номер.txt — это имя файла.
- File.readlines() используется для чтения чисел из файла.
- Цикл for используется для итерации, .isdidgits() используется для проверки того, что символ из файла является цифрой.
- Int(i) используется для добавления, только если цифра присутствует в файле.
- Я использовал print("The sum is:", sum) для получения вывода.
На снимке экрана ниже показано содержимое файла.
Числа из файла добавлены, и результат равен 22. Результат можно посмотреть на снимке экрана ниже.
Приведенный выше код мы можем использовать для нахождения суммы чисел в файле на Python.
Вам могут понравиться следующие руководства по Python:
В этом руководстве по Python мы узнали о программе Python для нахождения суммы чисел. Кроме того, мы рассмотрели следующие темы:
- Программа на Python для нахождения суммы трех чисел
- Программа Python для нахождения суммы n чисел с помощью цикла for
- Программа Python для нахождения суммы n чисел с помощью функции
- Программа Python для нахождения суммы n чисел с использованием цикла while
- программа на Python для нахождения суммы n чисел с помощью рекурсии
- Программа Python для нахождения суммы n четных чисел
- Программа Python для нахождения суммы n нечетных чисел
- Программа Python для нахождения суммы n простых чисел
- Программа на Python для нахождения суммы первых n чисел
- Программа Python для нахождения суммы первых n четных чисел
- Программа Python для нахождения суммы чисел в списке
- Программа Python для нахождения суммы чисел в строке
- Программа Python для нахождения суммы чисел в файле
Предприниматель, основатель, автор, блоггер, тренер и т. д. Посмотрите мой профиль.
Читайте также: