Переписывание кода и тестирования на codepad с некоторыми заявлениями об отладке показывает, что происходит. Я рекомендую вам использовать этот подход для запуска кода, чтобы узнать, что происходит.
int recur(int count)
{
int ret;
if(count==10)
ret = count;
else {
printf("Count Before = %d\n", count);
ret = (count +recur(++count));
}
printf("Count after = %d\n", ret);
return ret;
}
void main()
{
printf("%d\n",recur(0));
}
Бег дает это
Count Before = 0
Count Before = 1
Count Before = 2
Count Before = 3
Count Before = 4
Count Before = 5
Count Before = 6
Count Before = 7
Count Before = 8
Count Before = 9
Count after = 10
Count after = 20
Count after = 29
Count after = 37
Count after = 44
Count after = 50
Count after = 55
Count after = 59
Count after = 62
Count after = 64
Count after = 65
65
Таким образом, вы можете увидеть, что рекурсию до 10 первых, затем добавить 10, затем 9, то 8 и т.д. ...
Изменение его я = (количество + повторялись (кол + 1))
дает
Count Before = 0
Count Before = 1
Count Before = 2
Count Before = 3
Count Before = 4
Count Before = 5
Count Before = 6
Count Before = 7
Count Before = 8
Count Before = 9
Count after = 10
Count after = 19
Count after = 27
Count after = 34
Count after = 40
Count after = 45
Count after = 49
Count after = 52
Count after = 54
Count after = 55
Count after = 55
55
Но теперь 10 уровень вложенности только достиг, но добавленное количество еще на 9
Ie. pre increment означает, что вы добавляете дополнительные 10.
Смените '++ count' на' count + 1'. Преинкремент увеличивает значение 'count' до того, как он будет использоваться в этой строке. – Paulpro
О, неудивительно. Благодаря! Я пытался понять рекурсию и скопировал этот код из другого вопроса о SOF, который использовал операции инкремента. – xecutioner
ну тогда отредактируйте свой вопрос ... –