#913: 他就怎樣都不跑!!><


te00 (te00)


小弟已經搞了好久   第一個範例資料跟第二個都沒問題  到第三個-21的時候   他就怎樣都不跑!!><

求助高手!!謝謝

 

#include<stdio.h>
#include<stdlib.h>
int h(int);
int g(int);
int f(int);


int main(void)

{   long long int n, k;
    while(scanf("%lld",&n)!=EOF)
    {
   

    printf("%lld",f(n));
    }
    return 0;
   
}
int f(int x)
{   if     (x>h(x)) return f(x-1)-h(x);
    else if(x<h(x)) return f(g(x))-g(x);
    else            return 1;
}
int h(int y)
{   if(y<2)         return (-1);
    else            return (2+h(y-1)-h(y-2));
}
int g(int z)
{   if(z<=2)        return (z*z-1);
    else            return 2;
}

#1124: Re:他就怎樣都不跑!!><


deepdish (Bryan Lee)


可能是遞迴的stack overflow了
所以建議你先把其中一個遞迴改成迴圈試看看

#3988: Re:他就怎樣都不跑!!><


pcsh710720 (∫tanxdx=-㏑|cosx|+C)


小弟已經搞了好久   第一個範例資料跟第二個都沒問題  到第三個-21的時候   他就怎樣都不跑!!><

求助高手!!謝謝

 

#include
#include
int h(int);
int g(int);
int f(int);


int main(void)

{   long long int n, k;
    while(scanf("%lld",&n)!=EOF)
    {
   

    printf("%lld",f(n));
    }
    return 0;
   
}
int f(int x)
{   if     (x>h(x)) return f(x-1)-h(x);
    else if(x
    else            return 1;
}
int h(int y)
{   if(y<2)         return (-1);
    else            return (2+h(y-1)-h(y-2));
}
int g(int z)
{   if(z<=2)        return (z*z-1);
    else            return 2;
}

建議以dp建表

題目雖說-300<x<300

但運算下來會-300<x<90000 

所以陣列要建9萬多(宣告於全域 以免堆疊溢滿)

輸入前  先用for將f(x)以-10 -20 -30 ... -290代入建表

以免跑h(x)時overflow

隨後即可AC