并非所有的代码途径都返回值

并非所有的代码路径都返回值
static int DG(int i )
        {
            if (i <= 0)
            { return 0; }
            else 
                if (i >= 0 && i <= 2)
            { return 1; }
            else 
                    //if (i >= 3)此处加上这一句的话就会报“并非所有的代码路径都返回值”
            { return DG(i - 1) + DG(i - 2); }
        }
     
是什么原因啊
------解决思路----------------------
static int DG(int i )
        {
            if (i <= 0)
            { return 0; }
            else    if (i >= 0 && i <= 2)
            { return 1; }
            else  if (i >= 3)此处加上这一句的话就会报“并非所有的代码路径都返回值”
            { return DG(i - 1) + DG(i - 2); }
           else return 0;
        }
     
------解决思路----------------------

static int DG(int i )
        {
int result =0;
            if (i <= 0)
            { 
result = 0;
 }
            else 
                if (i >= 0 && i <= 2)
            { 
result =1;
 }
            else 
                    //if (i >= 3)此处加上这一句的话就会报“并非所有的代码路径都返回值”
            { 
result  = DG(i - 1) + DG(i - 2); 
}
return result ;
        }

------解决思路----------------------
既然都有return就没必要else了

static int DG(int i )
        {
            if (i <= 0)
            { return 0; }
            if (i >= 0 && i <= 2)
            { return 1; }
           if (i >= 3)此处加上这一句的话就会报“并非所有的代码路径都返回值”
            { return DG(i - 1) + DG(i - 2); }
        }
------解决思路----------------------
或者最简单的解决办法,在代码的最后,写上return 0;
这样前面没有覆盖到的,会走到最后一行
如果都覆盖到,相当于白写,对逻辑没影响.
------解决思路----------------------
编译器确实能够智能的判断一些if是否已经包含了全部的情况
比如
if(true)
{
return 1;
}
或者
int i=0;
if(i!=null)
{
return 1;
}
这些都不会报错
但是涉及数字比较的,编译器还没有智能到那种程度
比如
if(i>=0 
------解决思路----------------------
 i<0)
{
return 1;
}
会报错