Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 12.11.2019
Сообщений: 17

Вычисление значения выражения sqrt(x^50 + sqrt(x^49 + ... + sqrt(x^1))) используя рекурсию

26.03.2024, 18:14. Показов 709. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вычислить значение выражения, где x задаётся пользователем. «Начало счёта» F(50).

sqrt(x^50 + sqrt(x^49 + ... + sqrt(x^1)))
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.03.2024, 18:14
Ответы с готовыми решениями:

Цикл: Для числа N вычислить значение следующего выражения: sqrt((1) + sqrt((2) + ... + sqrt(2 * N)))
Как это решить? sqrt((1)+sqrt((2)+..+sqrt(2n)))

Вычислить значение выражения: sqrt(3+sqrt(6+.+sqrt(96+sqrt(99)
Пытаюсь решить данное выражение, но ответ выходит слишком большим, вот наработка: #include <iostream> #include <math.h> ...

Вычислить значение выражения sqrt (2 + sqrt (2 + sqrt (2 ... sqrt2))), (n-слагаемых)
Вычислить значение выражения sqrt (2 + sqrt (2 + sqrt (2 ... sqrt2))), (n-слагаемых),с помощью iostream, stdio.С помощью цикла for або while

11
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,739
Записей в блоге: 14
26.03.2024, 19:19
Как вариант:

C++
1
2
3
4
5
6
7
#include <cmath>
 
double f(int n, double x, double s=0.0, double p=1.0)
{
    if (n==0) return s;
    return f(n-1,sqrt(s+p*x),p*x);
}
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
26.03.2024, 19:53
Вроде так, если не ошибаюсь (через функцию):
C++
1
2
3
4
5
6
7
double func (double x, int n = 50)
{
  if (n == 1)
    return sqrt(x);
 
  return sqrt(pow(x, n) + func(x, n - 1));
}
При x = 1 получаем ответ 1,61803398874989.

В любом случае всегда можно сделать проверку через цикл:
C++
1
2
3
4
5
6
7
8
9
10
11
double func (double x, double n = 50)
{
  double memb = 1, sum = 0;
  for (int i = 1; i <= 10; i++)
  {
    memb *= x;
    sum = sqrt(memb + sum);
  }
 
  return sum;
}
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
26.03.2024, 19:58
gunslinger, а при х=2 попробуйте
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
26.03.2024, 20:13
Ответы различаются. Значит, ошибся где-то.

Добавлено через 10 минут
А где - хз.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
26.03.2024, 20:15
Цитата Сообщение от gunslinger Посмотреть сообщение
for (int i = 1; i <= 10; i++)
Почему в проверочной функции цикл всего до 10 ?
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
26.03.2024, 20:43
SmallEvil, потому что я "олень" (забыл "шаблон" подправить, по умолчанию там 10 в окончании цикла).

Правильный цикл (выше я накосячил):
C++
1
2
3
4
5
6
7
8
9
10
11
double func (double x, int n = 50)
{
  double memb = 1, sum = 0;
  for (int i = 1; i <= n; i++)
  {
    memb *= x;
    sum = sqrt(memb + sum);
  }
 
  return sum;
}
И ответы совпадают через цикл и рекурсию.
При x = 2 (n = 50) ответ: 33554432,3535534.

Верно или я опять "в астрал выпал"?

Добавлено через 23 минуты
Вроде верно. По крайней мере цикл выглядит "адекватно". А с рекурсией (особенно "сложной / выше среднего") у меня частенько бывают "затыки".
0
1 / 1 / 0
Регистрация: 12.11.2019
Сообщений: 17
26.03.2024, 20:50  [ТС]
Последний раз редактировалось Volga_; Сегодня в 18:24. Причина: Опечатка: x+1 -> x^1

Там не было опечатки, должно быть sqrt(x^50 + sqrt(x^49 + ... + sqrt(x+1)))

C++
1
2
3
4
5
6
7
double calculate_F(int n, double x) {
    if (n == 1) {
        return sqrt(x + 1);
    } else {
        return sqrt(x * calculate_F(n - 1, x) + 1);
    }
}

Не будет ли это правильным, сам накидал?

Добавлено через 2 минуты
Да, твой цикл и рекурсия верны для sqrt(x^50 + sqrt(x^49 + ... + sqrt(x^1)))

Но изначально там условие x+1 --> sqrt(x^50 + sqrt(x^49 + ... + sqrt(x+1)))
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
26.03.2024, 21:05
Лучший ответ Сообщение было отмечено Ilyaxxx как решение

Решение

Ilyaxxx, если нет опечатки (в чем есть сомнения), то большой вопрос, как связать "икс в степени" с "икс плюс один" через рекурсию.
Приведенный тобой вариант решения (как по мне) не выглядит правильным:
должен быть "икс в степени" с прибавлением функции, а ты икс умножаешь на функцию и с чего-то вдруг прибавляешь единицу. Откуда она там, если ее присутствие имеет место быть только в конце (когда n = 1)?

Добавлено через 9 минут
Хотя... Вроде достаточно просто (оказывается) можно переделать код под вариант с (x + 1) в конце (а не x^1).

Цикл:
C++
1
2
3
4
5
6
7
8
9
10
11
double func (double x, int n = 50)
{
  double memb = 1, sum = 1;
  for (int i = 1; i <= n; i++)
  {
    memb *= x;
    sum = sqrt(memb + sum);
  }
 
  return sum;
}
Рекурсия:
C++
1
2
3
4
5
6
7
double func2 (double x, int n = 50)
{
  if (n == 1)
    return sqrt(x + 1);
 
  return sqrt(pow(x, n) + func2(x, n - 1));
}
Ответ (как и раньше) при x = 2, n = 50: 33554432,3535534 (для обоих кодов).
Для x = 1 ответ тоже совпадает с вышеприведенным: 1,61803398874989.
Короче, нет вроде особой разницы между x + 1 и x^1 в конце (для n = 50 и проверенных значений x).
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,739
Записей в блоге: 14
27.03.2024, 11:02
Извините, у меня ошибочка была. Верно так:

C++
1
2
3
4
5
6
7
#include <cmath>
 
double f(int n, double x, double s=0.0, double p=1.0)
{
    if (n==0) return s;
    return f(n-1,x,sqrt(s+p*x),p*x);
}
gunslinger, лишние вычисления...
2
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
27.03.2024, 15:01
Catstail, дополнительные параметры функции. А если шаловливый пользователь такими же, как он сам, руками при вызове функции "залезет не туда" и изменит дефолтовые значения на другие (без понимания, что делает)?
Хотя это я так, придираюсь (видимо, по той причине, что сам такой код написать не способен; мой мозг иногда для меня самого "загадка").
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38200 / 21132 / 4310
Регистрация: 12.02.2012
Сообщений: 34,739
Записей в блоге: 14
27.03.2024, 15:08
Цитата Сообщение от gunslinger Посмотреть сообщение
А если шаловливый пользователь
- да, такая опасность есть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.03.2024, 15:08
Помогаю со студенческими работами здесь

Рекурсия: вычислить значение выражения sqrt(1+sqrt(2+...sqrt(n)))
Вычислить с помощью рекурсии и без нее - y(n) = sqrt(1+sqrt(2+...sqrt(n).. Как выполнить задание с помощью рекурсии? #include...

Вычислить значение выражения: Sqrt(x+sqrt(x+.sqrt(x) на с++
Для данного натурального N и вещественного x(x&gt;0) вычислить значение выражения: Sqrt(x+sqrt(x+...sqrt(x))) на с++ или си

Рекурсия: вычисление sqrt(1 + sqrt(2 + ... + sqrt(n)))
Не подскажите как расписать рекурсивно формулу? Спасибо!

Дано натуральное число n. Вычислить sqrt(2+ sqrt(5 + sqrt(7...))
Дано натуральное число n.Вычислить sqrt(2+ sqrt(5 + sqrt(7...)). Под корнями располагается n первых простых чисел. Написал как находить...

Рекурсия: вычислить значение выражения sqrt(x)+(sqrt(x)
Вычислите значение следующего выражения для данного натурального N и действительного x (x&gt; 0): √ x + √x + ... + √ x с++ код


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru