Działanie if'a

0

Mam takie pytanko , dlaczego na początku programu if(!a) wyswietla printf , a a program mimo tego dalej działa ?
#include <stdio.h>
void Funkcja(int a,const int *b)
{
if (!a)
{
printf("%d ", b[0]);
return;
}
int *c = b;
if (a%4 == 0)
{
printf("%d %d ", b[0], b[1]);
c+=2;
}
Funkcja(a/2, c);
printf("%d", b[a%4]);
}
int tab[] = {1, 3, 5, 7};
int main()
{
Funkcja(13,tab);
return 0;
}

0

Bzdury gadasz, wyświetla sie ten drugi printf a nie pierwszy bo warunek nie jest spełniony. Negacja czegoś co nie jest 0 daje 0.

0

void Funkcja(int a,const int *b)
{
if (!a)
{
printf("Jeżeli if z negacja sie odpali to wyswietli się : %d ", b[0]);
return;
}
int *c = b;
if (a%4 == 0)
{
printf("%d %d ", b[0], b[1]);
c+=2;
}
Funkcja(a/2, c);
printf("%d", b[a%4]);
}
int tab[] = {1, 3, 5, 7};
int main()
{
Funkcja(13,tab);
return 0;
}

Sprawdz sobie

2

Generalnie słabo mi. A rozumiesz ty że masz tam rekurencje? o_O Pierwszy if w pierwszym wywołaniu tej funkcji sie nie wykona. Może to ci pomoże:

#include <stdio.h>

void Funkcja(int a,const int *b)
{
    printf("Zeby zrozumiec rekurencje musisz zrozumiec rekurencje\n");
    if (!a)
    {
        printf("Jeżeli if z negacja sie odpali to wyswietli się : %d ", b[0]);
        return;
    }
    int *c = b;
    if (a%4 == 0)
    {
        printf("%d %d ", b[0], b[1]);
        c+=2;
    }
    Funkcja(a/2, c);
    printf("%d", b[a%4]);
}
int tab[] = {1, 3, 5, 7};
int main()
{
    Funkcja(13,tab);
    return 0;
}
1

Może taka modyfikacja przekona ciebie że nie jest tak jak myślisz: http://ideone.com/JTxLV4

#include <stdio.h>

void Funkcja(int a,const int *b)
  {
   if(!a)
     {
      printf("%d ",b[0]);
      return;
     }
   else printf("*");
   int *c=b;
   if(a%4==0)
     {
      printf("{%d %d} ",b[0],b[1]);
      c+=2;
     }
   Funkcja(a/2,c);
   printf("%d",b[a%4]);
  }
  
int tab[]={1, 3, 5, 7};
int main()
  {
   Funkcja(13,tab);
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1