Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2010, 20:14   #1
Trinity13
Пользователь
 
Регистрация: 06.12.2009
Сообщений: 11
По умолчанию Рекурсивная функция

Пыталась сделать задание б), но компилятор указывает на ошибку!!!Подскажите, как надо переделать, плиз!
Определить рекурсивную функцию:
а)вычисления суммы цифр натурального числа;
б)вычисления количества цифр натурального числа. разработать программу с заданными функциями.
Код:
#include <iostream>
#include <math.h>
using namespace std;
void f (int x)
{
	int x1,x2,i;
	for (int n=10; pow(10,n)<1; n--)
	{
		x1=x%pow(10,n);
		x2=(x-x1)/pow(10,n);
		x=x1;
		i++;
	}
	cout<<i;
}
int main ()
{
	int a;
	cin>>a;
	f(a);
	return 0;
}

Последний раз редактировалось Stilet; 15.02.2010 в 08:46.
Trinity13 вне форума Ответить с цитированием
Старый 13.02.2010, 20:49   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

а)
Код:
#include <iostream>
using namespace std;

int fa( int x ) {

   if ( x < 10 )
      return x;
   else 
      return x%10 + fa( x/10 );

}


int main () {

   int a;
   cout << "a = ? ";
   cin >> a;

   cout << "Summa tsifr chisla " << a << " rawna " << fa( a ) << endl;

   return 0;

}
б) - по образу и подобию...
Vago вне форума Ответить с цитированием
Старый 14.02.2010, 14:24   #3
Trinity13
Пользователь
 
Регистрация: 06.12.2009
Сообщений: 11
По умолчанию

Спасибо Вам большое!!!
Я пыталась сделать по аналогии задания (а), хотела поставить счетчик, чтоб посчитать количество цифр, но у меня, к сожалению, не вышло...=(
как вообще ставить счетчик в рекурсивной функции??
Trinity13 вне форума Ответить с цитированием
Старый 14.02.2010, 15:20   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Не за что

Счётчик (если имеется в виду счётчик цикла) в этой задаче не нужен совершенно!!

Рекурсия - это, вообще-то, шаманство Какие-то общие "как" здесь трудно определить. Два главных вопроса обычно нужно решить:

1.1 При каком условии нужно из ф-ии выходить?
1.2 Что при этом возвращать?

2.1 При каком условии нужно себя снова вызывать?
2.2 Что при этом себе передавать?


1.1, 2.1 и 2.2 в обеих Ваших задачках совершенно одинаковы По-поводу 1.2 - как скажете. Хотите сами додуматься - посадюжничаю ещё немного :-P ПопрОсите написать - напишу
Vago вне форума Ответить с цитированием
Старый 14.02.2010, 17:44   #5
Trinity13
Пользователь
 
Регистрация: 06.12.2009
Сообщений: 11
По умолчанию

Честное слово, я пыталась, мудрила и безрезультатно(( там нужно что то дописать, а что именно я не знаю! =( выводит 1 и все =(
#include <iostream>
using namespace std;
/*int fa( int x )
{
if ( x < 10 )
return x;
else
return x%10 + fa( x/10 );
}*/
int f( int k) //задание б)
{
if ( k < 10 )
return 1;
else
return f(k/10);
}
int main()
{
int a;
cout << "Vvedite a\n";
cin >> a;
//cout << "Summa tsifr chisla " << a << " rawna " << fa( a ) << endl;
cout << "kol-vo tsifr v chisle " << a << " rawno " << f( a ) << endl;
return 0;
}
Help me, please!!!! не мучайте меня =)))))
Trinity13 вне форума Ответить с цитированием
Старый 14.02.2010, 18:01   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Должен абсолютно серьёзно сказать, что "мудрите" Вы - в абсолютно верном направлении. Возьмите двузначное число, прокрутите его через Вашу нынешнюю рекурсивную процедурку и допишите в ней одну цифру и один знак арифметической операции!

Не напишете - в угол отправлю :-P
Vago вне форума Ответить с цитированием
Старый 14.02.2010, 18:07   #7
Trinity13
Пользователь
 
Регистрация: 06.12.2009
Сообщений: 11
По умолчанию

Ааааааа.........УРААААА!!!!!! =))))))))) у меня получилось =)))))))
я дописала "+1" и все вышло!!!!! =))))))) Спасибо Вам большое!!! =))))
P.S. хахаха =))))))) не удалось вам меня в угол поставить =Р =)
Trinity13 вне форума Ответить с цитированием
Старый 14.02.2010, 18:23   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Молодец!

В угол - всё равно :-P За то что тегами "[CODE]" не пользуетесь.

"Будет трудно - зови. Поможем!" Удачи!
Vago вне форума Ответить с цитированием
Старый 14.02.2010, 18:44   #9
Trinity13
Пользователь
 
Регистрация: 06.12.2009
Сообщений: 11
По умолчанию

Еще раз спасибо!!! Буду стараться исправляться!!!

P.S. вредные Вы!!! =))))
Trinity13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсивная функция Делфи Asira Помощь студентам 2 15.12.2009 17:43
Си++. Рекурсивная функция. Diamond2107 Помощь студентам 6 02.12.2009 19:48
Задача (рекурсивная) Witaliy Паскаль, Turbo Pascal, PascalABC.NET 2 21.01.2009 06:18