再帰を学ぶ最も良い方法の1つは、HaskellやLispやSchemeなどの関数型プログラミング言語で経験を積むことです。
再帰的な問題を発見することは、関数型プログラミング言語に関連するいくつかの問題とその答えを見つけることに減らすことができます。例は99 lisp problemsです。
実際にSchemeやLispを学ぶのに5分しかかかりませんので、明日のテストですぐにサンプルを始めることができます。
帰納法を学ぶもう一つの素晴らしい方法は、帰納法を含む数学的証明法を実践することです。再帰に関連する
重要な概念:あなたが問題を解決する方法を知っている必要はありません再帰で
。あなたは2つのことを知る必要があります。 1)問題の最小のインスタンスを解決する方法、2)小さな部分に分割する方法。
同様に、1)基本ケースと2)再帰的ケースが必要であることに留意するだけです。
ベースケースは、最小の入力で何をしたいかという1つのインスタンスを処理します。
再帰的なケースは、問題をサブ問題に分割します。最終的に、このサブ問題は基本ケースに還元されます。
例:
//1+...+n = n*n(+1)/2 = sumAll(n):
int sumAll(int x)
{
if(x == 0) //base case
return 0;
else
return sumAll(x-1) + x; //recursive case
}
それはベースケースを把握するのは難しいではないことを理解することが重要です。ただ存在しなければなりません。ここでのx> 0のための同等のソリューションは、次のとおりです。
//1+...+n = n*n(+1)/2 = sumAll(n):
int sumAll(int x)
{
if(x == 1) //base case
return 1;
else
return sumAll(x-1) + x; //recursive case
}
Dammit、私は再帰的な再帰のジョークを作るつもりだったが、私はそれがリンクされたスレッドへの最初の答えだと思う。 –
古いことわざがあります。「再帰を理解するには、再帰を理解することが役立ちます。」 –
プログラミング言語の構文は、再帰自体を理解することとは独立しています。関数型言語を考慮してください。 –