以下のコードは再帰関数を用いてmPnとmCnを計算し出力するプログラムです

Segmentation faultの箇所はコード4行目のn==m-nであることは分かっていますがなぜかが分かりません。どうすればプログラムを動かせますか?

#include <stdio.h>

int mpn(int m, int n){
  if(n==m-n){
    return 1;
  }
  return m*mpn(m-1, n);
}

int mcn(int n){
  if(n==1){
    return 1;
  }
  return n*mcn(n-1);
} 

int main(){
  int m, n, d;
  printf("input m and n:");
  scanf("%d %d", &m, &n);
  d=mpn(m, n);
  printf("%dP%d = %d\n", m, n, d);
  d=d/mcn(n);
  printf("%dC%d = %d\n", m, n, d);
  return 0;
}