カレントディレクトリ内(サブディレクトリ含む)の特定の拡張子を持つファイルを
一括で処理させたいと思い以下のようなシェルスクリプトを組んだのですが
サブディレクトリ内の一部ファイルが重複して処理されてしまいます
どこがダメなのでしょうか?

recursive_func()
{
for i in *
do
if [ -d $i ]
then
cd $i
recursive_func
cd ..
fi

if echo $i | grep '\.c$' > /dev/null || echo $i | grep '\.h$' > /dev/null
then
//ここに処理
fi
done
}

recursive_func