2015-04-20 3 views
-2

Таким образом, я создал функцию, которая, когда я помещаю в набор целых чисел, будет отображать ее пример результата (1234 = 10), но мне не разрешалось делать это с использованием рекурсии,Создание функции без использования рекурсии

Я просто потерял, как это сделать без рекурсии, возможно, это просто, но я не могу это увидеть.

Это мой исходный код, я использую C++:

#include <iostream> 

using namespace std; 

int sumofdigits(int n) { 
    if (n < 10) return n; 
    return n % 10 + sumofdigits(n/10); 
} 

int main() { 
    int number; 
    while (true) { 
     cout << "Please, enter numbers (0 to exit): "; 
     cin >> number; 
     if (!number) break; 
     cout << "your result is " << sumofdigits(number) << endl; 
    } 
    return 0; 
} 
+1

может быть, вы можете написать некоторый цикл – Panther

+2

Рекурсия это всего лишь способ петли, вся рекурсия может быть выражена как цикл. –

+0

ahh, я вижу, что вместо того, чтобы statemant в моей функции цифр sumof, я могу просто сделать цикл while вместо этого? – jsch64

ответ

2

Вот эквивалентные с использованием циклов:

unsigned int sum_of_digits(unsigned int value) 
{ 
    unsigned int sum = 0U; 
    while (value > 0) 
    { 
    sum = sum + value % 10; 
    value = value/10; 
    } 
    return sum; 
} 

Edit 1: Использование символов
Для некоторых из этих заданий, номер лучше всего хранить в виде строки числовых символов. Это позволяет программе обрабатывать цифры, которые являются слишком большими, чтобы вписаться в тип int, long int или long long.

unsigned int sum_of_digits(const std::string& number) 
{ 
    unsigned int sum = 0U; 
    const unsigned int length = number.length(); 
    for (unsigned int i = 0U; i < length; i++) 
    { 
    unsigned int digit = number[i] - '0'; // Convert from character to number. 
    sum += digit; 
    } 
    return sum; 
} 

Примечание: Это решение может быть быстрее, так как он не использует функцию деления, которая может быть дорогостоящей операцией на некоторых платформах.

0

Вы должны были бы использовать цикл:

int sumofdigits(int n) { 
    // will hold the sum at the end of the loop 
    int sum = 0; 
    while(n>0) { 
     sum += n%10; // add current digit 
     n /= 10; // drop the digit we just added 
    } 
    return sum; 
} 

Так с входом n=1234, цикл будет проходить через следующие шаги:

sum=0, n=1234 
sum=4, n=123 
sum=4+3, n=12 
sum=4+3+2, n=1 
sum=4+3+2+1, n=0 
Exit the loop when n=0 
Смежные вопросы