Я вставил ваш код в https://tio.run/#c-gcc, и вот результат:
main
прототип
.code.tio.c:3:7: warning: ‘main’ takes only zero or two arguments [-Wmain]
int main(int fib) {
^~~~
прототипом функции main
является int main(void)
или int main(int argc, char *argv[])
Поскольку вы хотите, чтобы пользователь вводил число, вы можете выбрать первую форму.
count
тип
.code.tio.c: In function ‘main’:
.code.tio.c:7:5: error: ‘count’ undeclared (first use in this function)
count = 0; // counts the number of times the function is called
^~~~~
Вы должны указать тип переменной count
, например
int count = 0;
fib_rec
декларация
.code.tio.c:8:12: warning: implicit declaration of function ‘fib_rec’ [-Wimplicit-function-declaration]
return fib_rec(n, &count);
^~~~~~~
Вы не объявили функцию перед ее использованием.
Вы можете объявить это следующим образом: int fib_rec(int n, int *count)
например, перед определением main
.
printf
использование
.code.tio.c: In function ‘fib_rec’:
.code.tio.c:21:15: warning: passing argument 1 of ‘printf’ from incompatible pointer type [-Wincompatible-pointer-types]
printf (count);
^~~~~
Функция printf
запрашивает некоторое форматирование. Если вы хотите отобразить целочисленное значение, используйте %d
:
printf("count value is: %d\n", count);
несовместимый тип указателя
.code.tio.c:22:27: warning: passing argument 2 of ‘fib_rec’ makes pointer from integer without a cast [-Wint-conversion]
return fib_rec(n-1, *count)+ fib_rec(n-2, *count);
^~~~~~
Здесь count
уже является указателем на целое число, *
не требуется:
return fib_rec(n-1, count)+ fib_rec(n-2, count);
отображение вычисленного значения
Ваш код возвращает вычисленное значение, но не отображает его.
Для этого замените return fib_rec(n, &count);
на
printf("fib_rec(%d) = %d\n", n, fib_rec(n, &count));
return 0;
Таким образом, исправленный код может быть:
#include <stdio.h>
int fib_rec(int n, int *count);
int main(void) {
int n;
printf("enter n\n");
scanf("%d",&n);
int count = 0; // counts the number of times the function is called
printf("fib_rec(%d) = %d\n", n, fib_rec(n, &count));
return 0;
}
int fib_rec(int n, int *count)
{
int b=0,c=1;
*count = *count +1;
if(n<=1)
{
return n;
}
else
{
printf ("count: %d\n", *count);
return fib_rec(n-1, count)+ fib_rec(n-2, count);
}
}