Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
boo777
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 12
#1

рекурсивная функция - C++

29.10.2010, 12:50. Просмотров 1024. Ответов 9
Метки нет (Все метки)

Описать рекурсивную функцию Digits(S) целого типа, находящую количество цифр в строке S без использования оператора цикла. С помощью этой функции найти количество цифр в данных пяти строках.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2010, 12:50     рекурсивная функция
Посмотрите здесь:

Рекурсивная функция - C++
Скласти програму з використанням рекурсивної функції, в якій обчислити суму 12 членів рекурентної послідовності : X0=1;X1=1;Xk=0,7Xk-1+...

Рекурсивная функция! - C++
Разработать рекурсивную функцию, возвращающую значение , для вычисления n-го члена последовательности b1 =5, bn+1=bn/(n2+n+1). Не знаю...

Рекурсивная функция! - C++
нужна помощь, как вычислить а в степени n, т.е написать программу использую две функции рекурсивную и нерекурсивный аналог. Очень нужно,...

рекурсивная функция - C++
Разработать рекурсивную функцию, удаляющую из строки все лишние пробелы. Пробелы считаются лишними, если их подряд идет более двух, если...

рекурсивная функция - C++
Составить программу с рекурсивною функцией n!+m! де n=4,m=6.

Рекурсивная функция - C++
#include <iostream> void countdown(int n); void main() { countdown(4); // вызов рекурсивной функции system("PAUSE"); } ...

Рекурсивная функция - C++
Составить прогруамму для вычисления , где , для вычисления n!!, использовать рекурсивную типизированную функцию.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.10.2010, 13:06     рекурсивная функция #2
C++
1
2
3
4
5
6
7
int count_digits(char* s){
    static int count=0;
    if (isdigit(*s)) count++;
    else
    if (*s=='\0') return count;
    return count_digits(++s);
}
easybudda
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
29.10.2010, 13:17     рекурсивная функция #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <ctype.h>
 
int dcnt(const char * s){ return ( ! *s ) ? 0 :  ( isdigit(*s) ) ? 1 + dcnt(s + 1) : dcnt(s + 1); }
 
#define ROWS 5
 
int main(void){
    char buf[BUFSIZ];
    int i;
 
    for ( i = 0; i < ROWS && printf("Row #%d: ", i + 1) && fgets(buf, BUFSIZ, stdin); ++i )
        printf("%d digits.\n", dcnt(buf));
 
    return 0;
}
Добавлено через 53 секунды
PointsEqual, а пробовали эту функцию два раза подряд вызывать?
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.10.2010, 13:24     рекурсивная функция #4
Цитата Сообщение от easybudda Посмотреть сообщение
PointsEqual, а пробовали эту функцию два раза подряд вызывать?
нет, щас попробую

Добавлено через 1 минуту
это все из -за
C++
1
static int count
да?

Добавлено через 1 минуту
)))
C++
1
2
3
4
5
6
7
8
9
10
11
int count_digits(char* s){
    static int count=0;
    if (isdigit(*s)) count++;
    else
    if (*s=='\0') {
        int tmp = count;
        count = 0;
        return tmp;
    }
    return count_digits(++s);
}
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
29.10.2010, 13:25     рекурсивная функция #5
А я бы так написал:
C
1
2
3
4
int digits_count (const char * s) {
    if (*s != '\0') return isdigit(*s) + digits_count(s + 1);
    else return 0;
}
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.10.2010, 13:28     рекурсивная функция #6
Цитата Сообщение от volovzi Посмотреть сообщение
int digits_count (const char * s) {
if (*s != '\0') return isdigit(*s) + digits_count(s + 1);
else return 0;
}
и ответ поделить на 4
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
29.10.2010, 13:30     рекурсивная функция #7
Цитата Сообщение от PointsEqual Посмотреть сообщение
и ответ поделить на 4
С какого это перепугу?
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
29.10.2010, 13:40     рекурсивная функция #8
Цитата Сообщение от volovzi Посмотреть сообщение
С какого это перепугу?
C++
1
2
3
    cout<<digits_count("12345") << endl;
    cout<<digits_count("123") << endl;
    cout<<digits_count("123456789") << endl;
Миниатюры
рекурсивная функция  
easybudda
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
29.10.2010, 13:47     рекурсивная функция #9
Цитата Сообщение от volovzi Посмотреть сообщение
А я бы так написал:
Да можно и так, один момент смущает. В man isdigit пишут, что
RETURN VALUES
The isdigit() and isnumber() functions return zero if the character tests
false and return non-zero if the character tests true.
То есть, не гарантированно, что она должна единицу возвращать, только число, отличное от нуля. В принципе можно и так
C
1
2
3
int isdigit(int ch){
    return ( ch >= '0' && ch <= '9' ) ? ch : 0;
}
эту функцию написать по каким-нибудь идейно-политическим соображениям разработчика компилятора...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2010, 14:02     рекурсивная функция
Еще ссылки по теме:

Рекурсивная функция - C++
Задание: Составить программу для счисления сумы К членов строки, где К определяется ||Uk| -|Um||&lt; е и е - наперед задана точность...

Рекурсивная функция - C++
Принять с клавиатуры натуральное число N. Написать рекурсивную функцию, которая будет выводить слово YES, если число N является точной...

Рекурсивная функция - C++
Как быть? Мне надо вызывать рекурсивную функцию очень много раз,вплоть до того что вылетает ошибка unhandled exception at ......

Рекурсивная функция[] - C++
Доброго времени суток. Мне необходимо написать рекурсивную функцию для решения задачи: Помогите пожалуйста в решении данной...

Рекурсивная функция. - C++
Доброго времени суток. Мне необходимо написать рекурсивную функцию для решения задачи: Помогите пожалуйста придумать алгоритм, никак...


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

Или воспользуйтесь поиском по форуму:
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
29.10.2010, 14:02     рекурсивная функция #10
Мда, действительно, без тернарного не обойтись:
C
1
2
3
4
int digits_count (const char * s) {
    if (*s != '\0') return (isdigit(*s) ? 1 : 0) + digits_count(s + 1);
    else return 0;
}
Yandex
Объявления
29.10.2010, 14:02     рекурсивная функция
Ответ Создать тему
Опции темы

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