하악 이건데.. 자꾸 시간초과가 뜨네요 

알고리즘 문제 사이트에서 이번이  3번째로 풀어보는건데  시간초과라는건 처음 당해봅니다 하악....

뭐가 가장 큰 문제일까요  포문이 너무 많은걸까요?  아래는 비루한 저의 코드입니다. 조언좀 해줘세요 ㅠㅠ



#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>


int cnt = 0;

int findMaxTree(int ** ar, int size, int i, int j, int n1, int n2);

void findWay(int ** ar, int size, int i, int j, int n1, int n2, int max);


int main(void)

{

int atestCase;

int n;

int ** ar;

int max = 0;

scanf("%d", &atestCase);


for (int i = 0; i < atestCase; i++)

{


scanf("%d", &n);

ar = (int**)malloc(sizeof(int*)*n);


for (int i = 0; i < n; i++)

ar[i] = (int*)malloc(sizeof(int)*(i + 1));



for (int i = 0; i < n; i++)

{

for (int j = 0; j <= i; j++)

scanf("%d", &ar[i][j]);

}



max = findMaxTree(ar, n, 0, 0, ar[0][0], ar[0][0]);

findWay(ar, n, 0, 0, ar[0][0],ar[0][0],max);

printf("%d", cnt);


cnt = 0;

}


return 0;                           

}


void findWay(int ** ar, int size, int i, int j, int n1,int n2, int max)

{


if (i >= size - 1)

{

if (n1 == max)

cnt++;


return;

}



int x1 = n1;

int x2 = n2;


x1 += ar[i+1][j];

x2 += ar[i + 1][j + 1];

findWay(ar, size, i + 1, j, x1, x1, max);

findWay(ar, size, i + 1, j + 1, x2, x2, max);



return;


}


int findMaxTree(int ** ar, int size, int i, int j, int n1, int n2)

{

int x1 = n1;

int x2 = n2;


if (i >= size - 1)

{

if (x1 > x2)

return x1;

else

return x2;

}


x1 += ar[i + 1][j];

x2 += ar[i + 1][j + 1];


int len1 = findMaxTree(ar, size, i + 1, j, x1, x1);

int len2 = findMaxTree(ar, size, i + 1, j + 1, x2, x2);


if (len1 >= len2)

{  

return len1;

}

else

{

return len2;

}


}