Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 3
1

Рекурсия: вычисление значения цепной дроби

26.04.2016, 22:03. Просмотров 2352. Ответов 5
Метки нет (Все метки)

Вычислить дробь: 1/(1+(1/1+(1/1+...))) используя рекурсию. Значение n задаёт количество ступеней.
Как вообще задать, чтобы рекурсия повторялась определённое количество раз?
Вот мой нерабочий код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
float f(float x)
{
    x=1/(1+f(x));
    return x;
}
 
int main ()
{
  int n;
  scanf ("%d",&n);
  printf ("\n%f",f(n));
  return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2016, 22:03
Ответы с готовыми решениями:

Составить программу для вычисления цепной дроби, через рекурсию
Здравствуйте! Требуется составить программу для вычисления цепной дроби, через рекурсию. Сколько...

Рекурсия: вычисление значения цепной дроби
помогите пожалуста решить задачу с использованием рекурсивной и обычной функций.

Рекурсия: вычисление значения цепной дроби
Подскажите, как решить эту задачу через рекурсию

Рекурсия: вычисление цепной дроби
Помогите плиз написать программу, используя рекурсию: \huge...

5
3 / 3 / 2
Регистрация: 25.03.2015
Сообщений: 28
26.04.2016, 22:37 2
C
1
2
3
4
5
6
7
float f(unsigned n)
{
    if (n == 0)
        return 1;
    n--;
    return (1 / (1 + f(n)));
}
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10877 / 6768 / 1619
Регистрация: 25.07.2009
Сообщений: 12,484
26.04.2016, 22:52 3
Лучший ответ Сообщение было отмечено Vadimchichik как решение

Решение

Как-то так, если ничего не перепутал
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
double f(unsigned steps) {
    return 1.0 / ( 1.0 + ( ( steps ) ? f(steps - 1) : 0.0 ) );
}
 
int main(void) {
    unsigned n;
    
    while ( printf("Steps: ") && scanf("%u", &n) == 1 )
        printf("Result: %.10f\n", f(n));
    
    return 0;
}
у меня сыпется при количестве шагов большем, чем 104827
2
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 3
26.04.2016, 22:57  [ТС] 4
Большое спасибо!)
0
3 / 3 / 2
Регистрация: 25.03.2015
Сообщений: 28
26.04.2016, 23:40 5
Объясните пожалуйста как читаются (что означают) такие штуки
Цитата Сообщение от easybudda Посмотреть сообщение
( ( steps ) ? f(steps - 1) : 0.0 )
Или ткните где прочитать
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10877 / 6768 / 1619
Регистрация: 25.07.2009
Сообщений: 12,484
26.04.2016, 23:48 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

linuxdesk, тренарный оператор ?:
псевдокодом можно расписать так
C
1
2
3
4
if ( steps != 0 )
    f(steps - 1);
else
    0.;
Бывает черезвычайно удобен, когда в зависимости от условия нужно вернуть одно из двух значений.
В книжках так обычно принцип его работы объясняют:
C
1
 ( condition ) ? value_if_true : value_if_false;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2016, 23:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вычисление значения цепной дроби
Здравствуйте господа программисты. Возникла проблема с решением задачи в Visual Basic, а курсовую...

Вычисление значения цепной дроби (рекурсивно и итеративно)
Описать рекурсивную и нерекурсивную функции вычисления значения цепной дроби: \huge...

Вычисление цепной дроби
Здравствуйте. Объясните, пожалуйста, как написать программу?:)

Рекурсивное вычисление цепной дроби
Народ помогите, как сделать рекурсивную функцию для этого y(n) = , n - число ступеней.


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.