もうだめ分からん。教えてエロい人!

もうだめだ。。。わからん。
なんで意図した結果がでないのだろう。。
どこがおかしいんだ。。。
変数ansにgojo関数の戻り値nを代入したいのです。
でも変な数字が代入されるみたいなんです。なにが悪いんだ。。。
死にたいわ!

#include <stdio.h>
//ユークリッド互除法のつもり
int gojo(int m,int n);
int main (void)
{
   int m = 1071,n = 1029;
   printf("最大公約数:%d \n",gojo(m,n));
   return 0;
}

int gojo(int m,int n)
{
   if (r)
       gojo(n,m % n);
   else
       return m;
}
//最大公約数:1627408016って出力されます。。。なぜ?
ぶっちゃけ助けを乞いました。恥ずかしいです。で、教えてもらった
int gojo(int m,int n)
{
   if (r)
       return gojo(n,m % n);
   else
       return m;
}

でおkとのこと。確かに。return goj...?ってなに?で、考えてみることにしました。

リターンしなさい。以上

闇にlinuxgccだとreturnいらんし、独習Cの階乗の再帰関数の問題もreturnなしでcygwin gcc通るし<-コレはグローバル変数に代入して終わるvoid関数だったから
最初で変な癖がついてたんだと確認。
ポインタでやろうとして分けわかんなくなってやめた。。。


明らかにこの癖もある

#! /usr/bin/perl -w
sub gojo{
  if($_[1]){gojo($_[1],$_[0] % $_[1])}
  else{$_[0]}
}

my $a=1071;
my $b=1029;
my $c = gojo($a,$b);
print "$c";