まあカエルジャンプ階段を踊りました

タイトル:カエルは、クラス1レベルにジャンプすることができ、あなたはまた、レベル2のレベルでホップすることができます。カエルは、合計n個学年レベルどのように多くのジャンプを求めて飛び込みましたか?

唯一のステップは、1つだけカエルがジャンプすると仮定すると、2つのステップがありますが、2回のジャンプがあります。しかし、最初のステップ3と、カエルの2種類があるジャンプ:カエルが2つのだけのステップ、その後、最初のステップの階段を飛び降り、カエルの最初のステップは、2つのステップを跳んだ後、ステップの左側に、12回のジャンプに対応する各ステップ。次に、実際には、トピックに戻り、N階段方法をジャンプし、分析の第3レベルが同じです。

我々は、ときにジャンプN F(N)で表されるNの関数としてのステップのジャンプ。

n = 1の場合、F(1) = 1、
n = 2の場合、F(2) = 2、
n = 3の場合場合、F(3)= F( 2)+ F(1);
場合はn = 4、F(4)= F( 3)+ F(2)。

・・・

N = N時間、F(N)= F( N-2)+ F(n-1)と
この対応する周知のフィボナッチ数の列の数に、その溶液を2つに分割されている:再帰と反復、再帰的な方法が非常に簡単であるが、処理速度が非常に遅い場合50番まで、あまりにも多くのシステム・パラメータを押し込み。
だから、コードを与えられました:

#include <stdio.h>
int JumpSteps(int n)
{
	if (n > 0 && n <= 2)
		return n;
	else
		return JumpSteps(n - 2) + JumpSteps(n - 1);
}
int main()
{
	int n;
	printf("请输入台阶级数:");
	scanf("%d", &n);
	int ret = JumpSteps(n);
	printf("小青蛙共有 %d 种跳法\n", ret);
	return 0;
}

ここに画像を挿入説明
いずれかの下:反復アルゴリズムの
コードが貼り付けられます

#include <stdio.h>

int JumpSteps2(int n)
{
	int n1 = 1;
	int n2 = 2;
	int result = 0;
	if (n > 0 && n <= 2)
		return n;
	for (int i = 3; i <= n; i++)
	{
		result = n1 + n2;
		n1 = n2;
		n2 = result;
	}
	return result;
}

int main()
{
	int n;
	printf("请输入台阶级数:");
	scanf("%d", &n);
	int ret = JumpSteps2(n);
	printf("小青蛙共有 %d 种跳法\n", ret);
	return 0;
}

ここに画像を挿入説明
もちろん由来他人が提起した別のトピックがあります
クラス1つのレベルにジャンプすることができカエルが、あなたはまた、ステップ...... n個のステップをスキップすることができ、レベル2に飛び乗っすることができます。カエルは、合計n個学年レベルどのように多くのジャンプを求めて飛び込みましたか?
ここで、ホップのFib(N)を表すNカエルジャンプ方法ステップで、我々はのFib(0)= 1が与えられ、すなわち、0工程が進みます。

n = 1の場合、一つだけジャンプ方法、すなわち、ステップ1ホップ:のFib(1)= 1。

n = 2の場合、ジャンプするには、2つの方法、一次及び二次のジャンプをジャンプがある:のFib(2)=のFib(1)+のFib(0)= 2。

最初の跳ね返りの後、二次、およびそこのFib(3-2); n = 3の場合、(3-1)ジャンプする3つの方法は、最初の跳ね返り最初の順序の後に存在する、及びFIBにあるジャンプジャンプ方法;第バウンス後三次、及びFIBにある(3-3)ジャンプ方法、すなわちのFib(3)=のFib(2)+のFib(1)+のFib(0)= 4。

場合N = Nジャンプモードの種類、最初の跳ね返りの後の最初の順序、及びのFib(N-1)であるが、nがある場合ジャンプ;第バウンス後に二次の、そしてそこのFib(N-2 )と、すなわちのFib(N)=のFib(N-1)+のFib(N-2)+のFib(N-3をジャンプするためのアウト......最初のジャンプ方法の後に、N、ならびに後にFIBに(NN) )+ ...... +のFib(NN)=のFib(0)+のFib(1)+のFib(2)+ ...... +のFib(N-1)

そしてためのFib(N-1)=のFib (0)+のFib(1)+のFib(2)+ ...... +のFib(N-2)。
二相減算式:のFib(n)は-Fib(N -1 )=のFib(N-1)
のFib(N)= 2 *のFib推定することができる (N-1)、N> = 2
以下のように再帰方程式:
ここに画像を挿入説明
したがって、F(N)= 2 * F (N-1) * 2F 2 =(N - 2)= 2 ... (N - 1) * F(0)= 2 (N - 1)
理解に基づいて、コードを取得することは容易です。

#include <stdio.h>
int JumpSteps3(int n)
{
    if(n == 1)
        return 1;
    else
        return 2*JumpSteps3(n-1);
}
int main()
{
    int n;
    printf("请输入台阶级数:");
    scanf("%d", &n);
    int ret = JumpSteps3(n);
    printf("小青蛙共有 %d 种跳法\n", ret);
    return 0;
}

ここに画像を挿入説明
この時点で私はあなたを助けることを望んで、カエルの問題も終了し、理解の段階に飛びつきました。

リリース5元の記事 ウォンの賞賛0 ビュー116

おすすめ

転載: blog.csdn.net/Noreturnperiod/article/details/105303310