Хотя порядок оценки не гарантируется (см множество других ответов), есть другой, более фундаментальная проблема (на самом деле, две из них):
int multiFib(int x)
{
if (x<2){
return 1;
count++;
}
}
- Вы пытаетесь увеличиваем
count
после вас» ve вернулся из вашей функции. Ваш компилятор должен быть предупрежден о недостижимом коде.
- Вы не возвращают значение из
multiFib()
, когда вход больше, чем 2.
Фрагмент main()
, что вы показываете ссылается на неопределенную переменную i
. Я предполагаю, что это потому, что вы удалили цикл for (i = 0; i < 40; i++)
из-за инструкции printf()
.Для того, чтобы решить эту проблему «порядок оценки», вы можете использовать:
int count;
int main(void)
{
for (int i = 0; i < 40; i++)
{
count = 0;
int fib = multiFib(i);
printf("%3d %10d %10d\n", i+1, fib, count);
}
return(0);
}
Это оценивает количество вызовов multiFib()
для каждого вызова верхнего уровня для функции.
Для самой multiFib()
функции, вы, вероятно, необходимо:
int multiFib(int x)
{
count++;
if (x < 2)
return x;
else
return multiFib(x-1) + multiFib(x-2);
}
Хотя это ужасающе медленное внедрение чисел Фибоначчи, так что вы не должны использовать это в качестве ответа на свою домашнюю работу (но это сделать «рабочая» функция).
Пример вывода:
1 0 1
2 1 1
3 1 3
4 2 5
5 3 9
6 5 15
7 8 25
8 13 41
9 21 67
10 34 109
11 55 177
12 89 287
13 144 465
14 233 753
15 377 1219
16 610 1973
17 987 3193
18 1597 5167
19 2584 8361
20 4181 13529
21 6765 21891
22 10946 35421
23 17711 57313
24 28657 92735
25 46368 150049
26 75025 242785
27 121393 392835
28 196418 635621
29 317811 1028457
30 514229 1664079
31 832040 2692537
32 1346269 4356617
33 2178309 7049155
34 3524578 11405773
35 5702887 18454929
36 9227465 29860703
37 14930352 48315633
38 24157817 78176337
39 39088169 126491971
40 63245986 204668309
Обратите внимание, что если вы идете далеко за 40, вы начнете получать арифметическое переполнение. Это также становится очень (очень, очень) медленным.
Пожалуйста, обратите внимание на ваше письмо, задавая здесь. –
любые ответы? Глобальная переменная не увеличивается. –
Скопировать-вставить сообщение об ошибке, сообщающее вам развернуть вопрос, чтобы сделать это, является самым верным способом сбора негативного внимания. –