# Отслеживание рекурсии в C -- c поле с участием recursion поле с участием console пол Связанный проблема

## Tracing Recursion in C

1 ### проблема

русский

У меня есть базовое понимание рекурсивных функций и отслеживания, но что-то идет Haywire, когда я пытаюсь проследить следующую программу:

` <код> #include <stdio.h> #include <stdlib.h>  int f1(int *a, int c);  int main(void) {     int a=2, b=3, c=4, d=5;     a = f1(&c, f1(&b,d));     printf("a= %d b= %d c= %d d= %d ",a,b,c,d);      system("pause");     return 0; }  int f1(int *a, int c) {     *a = c - 2;     c = c*2 - (*a);     printf("a= %d c= %d ", *a, c);     return c - *a; }   `

Когда я отслеживаю, я получаю два звонка F, F (4,4) и F (3,5). Я могу правильно проследить значения возврата, а оператор printf в функции f. Но окончательный распечаток в Main дает мне a = 4 b = 3 c = 2 d = 5, когда я пишу ее, я окажусь от C = 4 ... даже после того, как у меня есть двойной, а тройной проверил мою работу. Когда я отладкой, я не могу найти, когда значение основного «C» меняется, и я, конечно, не вижу никакой арифметики в коде для Main's «C».

Спасибо заранее ... у меня есть что-то маленькое, что я с видом на.

Английский оригинал

I have a basic understanding of recursive functions and tracing, but something is going haywire when I try to trace the following program:

``#include <stdio.h> #include <stdlib.h>  int f1(int *a, int c);  int main(void) {     int a=2, b=3, c=4, d=5;     a = f1(&c, f1(&b,d));     printf("a= %d b= %d c= %d d= %d ",a,b,c,d);      system("pause");     return 0; }  int f1(int *a, int c) {     *a = c - 2;     c = c*2 - (*a);     printf("a= %d c= %d ", *a, c);     return c - *a; } ``

When I trace, I get two calls to f, f(4,4) and f(3,5). I can trace the return values correctly and the printf statement in the f function. But the final printf in main gives me a= 4 b= 3 c= 2 d= 5 when I write it out I end up with c=4... even after I have double and triple checked my work. When I debug I cant find when the value of the main "c" changes and I certainly dont see any arithmetic in the code for main's "c".

Thanks in advance... I have a feeling its something small that I'm overlooking.

</div

## Список ответов

1  Лучший ответ

Попробуйте так:

` <код> if(\$("#someElement").data("datepicker") != null){    // datepicker initialized } 2  `

<Сильные> Выход

` <код> if(\$("#someElement").data("datepicker") != null){    // datepicker initialized } 3  `

Try like this:

``#include <stdio.h> #include <stdlib.h>  int f1(int *a, int c, const char *sa);  int main(void) {     int a=2, b=3, c=4, d=5;     a = f1(&c, f1(&b,d, "main.b"), "main.c");     printf("a= %d b= %d c= %d d= %d ",a,b,c,d);      system("pause");     return 0; }  int f1(int *a, int c, const char *sa) {   printf("%d: set %s from %d to %d ", __LINE__, sa, *a, c - 2);    *a = c - 2;   c = c*2 - (*a);   printf("a= %d c= %d ", *a, c);    return c - *a;  } ``

Output

``16: set main.b from 3 to 3 a= 3 c= 7 16: set main.c from 4 to 2 a= 2 c= 6 a= 4 b= 3 c= 2 d= 5 ``
</div

2 <код> main() 's <код> c собирается измениться прямо здесь:

` <код> int f1(int *a, int c) {     *a = c - 2; /* <-- */     c = c*2 - (*a);     printf("a= %d c= %d ", *a, c);     return c - *a; }   `

Во внешнем вызове <код> f1 , вы передаете указатель на <код> c . В ` f1 `, при назначении <код> *a , он обновляет все, что <код> a указывал на <код> c .

.

`main()`'s `c` is going to change right here:

``int f1(int *a, int c) {     *a = c - 2; /* <-- */     c = c*2 - (*a);     printf("a= %d c= %d ", *a, c);     return c - *a; } ``

In the outer call to `f1`, you're passing a pointer to `c`. In `f1`, when you assign `*a`, it updates whatever `a` was pointing to, which is `c`.

</div

1 Вызов <код> a = f1(&c, f1(&b,d)); прошедший адрес <код> c0 к <код> c1 и в этой функции первая строка

` <код> c2  `

Изменяет значение <код> c3 . <Код> c4 относится к значению <код> c5 .

Call `a = f1(&c, f1(&b,d));` passed address of `c` to `f1()` and in that function the first line

``*a = c - 2; ``

changes the value of `c`. `*a` refers to value of `c`.

</div

## Связанный проблема

53  Как реализовать продолжения?  ( How to implement continuations )
Я работаю над схемой переводчика, написанный в C. В настоящее время он использует стек времени выполнения C в качестве собственного стека, который представляе...

0  Реализация ARP Smooth  ( Implementing arp sweep )
Я играю с libpcap / jpcap. Реализация Sweeper ARP. Я отправляю запрос на все IP в блоке до вещательного адреса и чтения ответов. Теперь я не могу думать о том...

0  Подсчет и сортировка в C  ( Counting and sorting in c )
Я заряжаюсь с обычной программой C, которая подсчитывает ряд входов и соответственно классифицирует их. У меня на самом деле нет ни одного кода, написанного д...

0  Где хранятся переменные указателя и как компилятор доступа к нормальной переменной? [закрыто]  ( Where the pointer variables are stored and how compiler access normal variable )
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт. Этот вопрос не соответствует Рекомендациям переполнения ...

// Ребята у меня есть проблемы с моим кодом и разрывая мои волосы, пытаясь решить это. Вопрос в том, что я пытаюсь подтвердить свой код, поэтому он не рассчит...

0  Как остановить программу хранения более одного символа в переменную CHAR? [Дубликат]  ( How to stop a program from storing more than a single character into a char vari )
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

0  Структура в C- Чтобы добавить атрибут во время выполнения?  ( Structure in c to add a attribute at runtime )
Как добавить переменную / атрибут участника на структуру из основного в C? ...

0  Если безымянный семафор инициализируется в общей памяти, Shm_unlink () уничтожает семафор?  ( If an unnamed semaphore is initialized in shared memory does shm unlink destr )
Я использую POSIX SEMAPHORES и совместную память для координации одного производителя и одного потребительского буфера. Я хочу полностью инициализировать эту ...

1  Lnk2001: неразрешенный внешний символ _maincrtstartup  ( Lnk2001 unresolved external symbol maincrtstartup )
Я пытаюсь скомпилировать пример Win32 Parrot Ardrone SDK V1.8, используя Visual Studio 2012 Express для Windows Desktop. Я использую Windows 7 64-бит. SDK нап...

7  Как портировать родной C-код на Android  ( How to port native c code on android )
Кто-нибудь может сказать мне, как портировать нативную программу C на платформе Android ..умел ли я включить некоторые библиотеки C или как именно ...? Спас...

78  Srand () - зачем называть это только один раз?  ( Srand why call it only once )
Этот вопрос о комментарии в этом вопросе Рекомендуемый способ инициализации Srand? Первый комментарий говорит, что <код> srand() следует вызывать только од...

0  Ошибка сборки Android NDK  ( Android ndk build error )
Я написал маленькую Hello World Program в C, а вот это <код> circ.onclick = { e: dom.MouseEvent => ... } 0 Вот файл make <код> circ.onclick = { e: dom....

42  Как я могу легко увидеть график C / C ++ #include? [закрыто]  ( How can i see the c c include graph easily )
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт. Этот вопрос не соответствует Рекомендациям переполнения ...

2  Состояние не удалось для ldrloaddll  ( Status failed for ldrloaddll )
Я пытаюсь разрабатывать функцию ldrloaddll и мне не повезло с этим .. Я также проушинул для некоторых примеров, нет никакой много документации или правильного...

-1  Могу ли я использовать бесплатно () формально в VS2013?  ( Can i use free formally in vs2013 )
<код> #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #define TSIZE 45 struct film{ char title[TSIZE]; int ...