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

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

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

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

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

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

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

Рекурсивная функция - C++
Как мне оформить в рекурсивную функцию? Напишите код пожалуйста, буду благодарен)) #include <iostream> #include <conio.h> using...

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

Рекурсивная функция - C++
ПРивет всем! ребят помогите решать вот такую задачку: Используя команды write(x) лишь при х=0,1,…9 написать рекурсивную процедуру вывода...

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

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

9
PointsEqual
ниначмуроФ
836 / 520 / 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);
}
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
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, а пробовали эту функцию два раза подряд вызывать?
1
PointsEqual
ниначмуроФ
836 / 520 / 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);
}
0
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;
}
0
PointsEqual
ниначмуроФ
836 / 520 / 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
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
29.10.2010, 13:30 #7
Цитата Сообщение от PointsEqual Посмотреть сообщение
и ответ поделить на 4
С какого это перепугу?
0
PointsEqual
ниначмуроФ
836 / 520 / 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;
0
Миниатюры
рекурсивная функция  
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
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;
}
эту функцию написать по каким-нибудь идейно-политическим соображениям разработчика компилятора...
0
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;
}
0
29.10.2010, 14:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2010, 14:02
Привет! Вот еще темы с ответами:

Рекурсивная функция C++ - C++
Сосчитать f(y)=3y+5, yk - входное данное.

Рекурсивная функция y=3x+5 - C++
Здравствуйте! Помогите написать прогу(или если есть готовое решение буду благодарен! Век помнить буду) на c++, которая решает данный...

рекурсивная функция - C++
написал программу вот такую как ее оформить в виде рекурсивной функции . эта программа проверяет на палиндром строку от i до j ...

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


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

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

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