#c #recursion
#c #рекурсия
Вопрос:
я столкнулся с проблемой в этой программе, может кто-нибудь сказать мне, что я делаю не так, программа ничего не отобразит после того, как я введу ее. (Код-это сумма цифр, введите #пример 12345 = 15)
#includelt;stdio.hgt; int sum(int num); int sum(int num){ int total=0; if(sum==0){ return total; } else{ total =num; num/=10; return sum(num); } } int main() { int num,k; printf("Enter 5 positive number: "); scanf("%d",amp;num); printf("Sum is: %d",sum(num)); }
Комментарии:
1. Ваш
total
инициализируется0
для каждого вызова.2. Правильно, спасибо, но по-прежнему не отображается символ «застрял на курсоре»
3. Сначала напишите рекурсивное правило. На бумаге.
Ответ №1:
Вот эмпирическое правило: всякий раз, когда у вас есть программа непрерывной рекурсии, попробуйте проверить свои базовые случаи.
Здесь вы проверяете sum
функцию вместо num
параметра. Компилятор C позволяет вам это сделать, потому что функции в C являются указателями, а указатели содержат адреса в виде числового значения.
Комментарии:
1. о Манн, большое тебе спасибо, какой же я идиот.
Ответ №2:
Вам просто нужно изменить условие с sum==0
на num==0
. Теперь он что-нибудь напечатает. Однако логика вашей программы все равно неверна. Вы можете изменить свою функцию суммы на эту.
int sum(int num){ if(num==0) { return 0; } return num % 10 sum(num/10); }
И вы можете попробовать узнать больше о рекурсии с помощью стека, поскольку рекурсия-это в основном просто стек.