C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: Fibonacci Sequence


(過去ログ 112 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■66423 / inTopicNo.1)  Fibonacci Sequence
  
□投稿者/ Sottyoru (1回)-(2013/04/23(Tue) 03:09:36)

分類:[.NET 全般] 

F0=0;
F1=1;
F2=F0+F1;
F3=F1+F2;
.
.
Fn=Fn-1 + Fn-2

このようになるプログラムを再帰的アルゴリズムを使って書きたいのですが

どうすれば良いでしょうか?

C#です。
引用返信 編集キー/
■66424 / inTopicNo.2)  Re[1]: Fibonacci Sequence
□投稿者/ 774RR (81回)-(2013/04/23(Tue) 08:12:49)
丸投げしないで自分で作ってみなよ。そのままぢゃん。
こう書いてみたけど***になりました・・・だったら推敲してあげられるけど
全部作ってちょんまげ、ならお断り。
引用返信 編集キー/
■66425 / inTopicNo.3)  Re[1]: Fibonacci Sequence
□投稿者/ shu (289回)-(2013/04/23(Tue) 08:15:25)
No66423 (Sottyoru さん) に返信
> F0=0;
> F1=1;
> F2=F0+F1;
> F3=F1+F2;
> .
> .
> Fn=Fn-1 + Fn-2
>
F(0) = 0
F(1) = 1
F(n) = F(n-1) + F(n-2)

なので
条件判定でn=0,1,>1のときの戻り値をそれぞれ0,1,F(n-1)+F(n-2)にすればよいです。
引用返信 編集キー/
■66459 / inTopicNo.4)  Re[2]: Fibonacci Sequence
□投稿者/ Sottyoru (2回)-(2013/04/24(Wed) 04:50:18)
using System;

class Program
{
public static int Fibonacci(int n)
{
int a = 0;
int b = 1;
// In N steps compute Fibonacci sequence iteratively.
for (int i = 0; i < n; i++)
{
int temp = a;
a = b;
b = temp + b;
}
return a;
}

static void Main()
{
for (int i = 0; i < 15; i++)
{
Console.WriteLine(Fibonacci(i));
}
}
}

元となるものを作ってみたのですが、ここからどう変えればいいでしょうか・・?
引用返信 編集キー/
■66460 / inTopicNo.5)  Re[3]: Fibonacci Sequence
□投稿者/ shu (294回)-(2013/04/24(Wed) 07:33:40)
No66459 (Sottyoru さん) に返信
> 元となるものを作ってみたのですが、ここからどう変えればいいでしょうか・・?

Fibonacciの戻り値が
n=0のとき 0
n=1のとき 1
n>1のとき Fibonacci(n-1) + Fibonacci(n-2)

となればよいです。
Fibonacciの中でループはないです。
引用返信 編集キー/
■66466 / inTopicNo.6)  Re[4]: Fibonacci Sequence
□投稿者/ 774RR (84回)-(2013/04/24(Wed) 20:29:42)
再帰って自分自身を呼び出す動作のことを言う。
初めて使うんだとすると概念が難しいかな?かといって解説=答えそのものだったりして・・・

この例では Fibonacci() 関数の中から Fibonacci() 関数自体を呼び出すように作ると、それが再帰。
再帰の考え方を使うと、プログラム自体は簡単になることが多い。
課題文であげられているロジックをそのまま実装すればいいんだ。

あえて C# でなく C で書いてみると (ってほとんどそのまま C# で使えるんだが)
int f(int n) {
if (n==0) return 0; // f(0)=0 がこれで実現できた (*1)
if (n==1) return 1; // f(1)=1 がこれで実現できた (*2)
return f(n-1)+f(n-2); // f(n)=f(n-1)+f(n-2) が実装できた (*3)
}

(*3) の行で、自分自身を呼び出している=再帰。
何も考えずに自分自身を呼び出し続けると永遠に終わらないので、
特定条件では自分を呼ぶ代わりに呼び出し元に戻る必要があって、それが (*1) (*2)

# で、たぶんこの次の課題として再帰はループにできる場合があってうんぬん
# 提示コードはそのループに書き換えた実装例だ。
# さらにその次の課題で再帰とループで実行回数がうんぬん、だと勝手に思う

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -