Пояснить работу рекурсивного кода

raganrok

Всем доброго времени суток!
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define n 5
 
int sum_recurs(int *a,int index)
{
 return index==0? *a:*(a+index)+sum_recurs(a,index-1);
}
 
int main()
{
     int r,p, i, mas[n];
     printf("vvedite elementi massiva:\n");
     for(int j=0;j<n;j++)
     scanf("%d", &mas[j]);
     printf("summa=");
     printf("%d",sum_recurs(mas,n-1));
     getch();
     return 0;
}
объясните вот эту часть:
 return index==0? *a:*(a+index)+sum_recurs(a,index-1);
я знаю, что делает прога, но вопрос в том как она это делает=) *a - это указатель, верно?
index==0?
это проверка 1 индекса массива. Ее можно описать через If?
*a:*(a+index)
эта часть кода вообще осталась непонятой...
3 ответа

raganrok

Тернарная_условная_операция
/*условие*/ ? /*если истина*/ : /*если ложно*/
if(/*условие*/)
     /*если истина*/
else
     /*если ложно*/


raganrok

спасибо)


raganrok

а можно использовать оператор условия if-else?
да, я же написал пример, разницу видишь? и правильно, нет никакой разницы
int sum_recurs(int *a,int index)
{
    if(index==0)
       return *a;
    else
        return *(a+index)+sum_recurs(a,index-1);
}