warning: control reaches end of non-void function [-Wreturn-type] が出た【C++】

概要

atcoder.jp

上記の問題を解くためにc++再帰関数を書いたところ

warning: control reaches end of non-void function [-Wreturn-type]

が出た。

問題のコード

int anc(int cnt, int n){
    if(n == 1) return cnt+1;
    anc(cnt+1, a[n-1]);
}

int main() {
    int n;
    cin >> n;
    for(int i=1; i<n; i++) cin >> a[i];
    cout << anc(0, a[n-1]) << endl;
}

解決方法

タイトルのwarningの内容について調べてみると再帰関数の最後にreturnがないためにwarning が出る。
warningが出力されないように問題のコードを修正すると

int anc(int cnt, int n){
    if(n == 1) return cnt+1;
    return anc(cnt+1, a[n-1]);  // 修正箇所
}

int main() {
    int n;
    cin >> n;
    for(int i=1; i<n; i++) cin >> a[i];
    cout << anc(0, a[n-1]) << endl;
}

になる。