рекурсия c, программа не отображается

#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); }  

И вы можете попробовать узнать больше о рекурсии с помощью стека, поскольку рекурсия-это в основном просто стек.

Ответ №3:

В вашем коде общая сумма инициализируется до нуля при каждом вызове функции. и переменная с именем sum не инициализируется. Просто измените sum==0 на num==0.Я также дал логику для суммирования цифр числа.

введите описание изображения здесь