2016-06-23 7 views
-1

OK。私はこれが古典であることは知っていますが、トレーステーブルがどのように機能するかを説明するスレッドは見つからないようです。私自身の試みは不完全な論理のように見えます。たとえば、このコードは素晴らしい作品:VB再帰とフィボナッチシーケンス

Sub Main() 
     For i = 1 To 6 
      Console.WriteLine(f(i)) 
     Next 
     Console.ReadKey() 
End Sub 

はその後、我々は機能を持っている:

Function f(n) 
     If n <= 1 Then 
      Return n 
     Else 
      n = f(n - 1) + f(n - 2) 
      Return n 
     End If 
    End Function 

はしかし、私のトレース・テーブルは次のように終わる:

私には完璧な理にかなって
i f-1 f-2 n 
1   1 
2 1 0 1 
3 2 1 3 
4 3 2 5 
5 4 3 7 
6 5 4 9 

、明らかに私はヒントを持っていないことを示しています。欠陥論理は何ですか?

+0

「私には完璧な意味がありますが、明らかに私は手がかりがないことを示しています」 - その声明は非常に矛盾しています。私は実際にあなたの質問が何であるか分かりません。トレーステーブルの仕組みを知りたいだけですか? –

答えて

1

f-1列の名前をf(n-1)とし、現時点ではi-1と表示するだけなので、トレーステーブルは意味を持ちません。

私はあなたが作ったミスの数を固定した場合、私は(太字で強調表示)次のコードを取得する:

 
Public Module modmain 

Function f(n) As Integer 
    If n <= 1 Then 
     Return n 
    Else 
     n = f(n - 1) + f(n - 2) 
     Return n 
    End If 
End Function 

Sub Main() 
     For i as Integer = 1 To 6 
      Console.WriteLine(f(i)) 
     Next 
     Console.ReadKey() 
End Sub 

End Module 

私は最初の6つのフィボナッチ要素の正しい出力入手:

をトレース・テーブルの場合
$ vbnc fib.vb 
Visual Basic.Net Compiler version 0.0.0.5943 (Mono 4.0.1 - tarball) 
Copyright (C) 2004-2010 Rolf Bjarne Kvinge. All rights reserved. 

A warning message should have been shown: 'Parameter type should be specified.' 
Assembly 'fib, Version=0.0, Culture=neutral, PublicKeyToken=null' saved successfully to '/home/kommusoft/testfolder/fib.exe'. 
Compilation successful 
Compilation took 00:00:00.7312840 
$ mono fib.exe 
1 
1 
2 
3 
5 
8 

、あなたは、列の名前を変更する必要があり、彼らは次のようになり、このようなこと:

i f(i-1) f(i-2) f(i) 

今最初の2つのi S(i=0i=1)のためにあなたは、単に最後の列に01に記入することができます

 
i f(i-1) f(i-2) f(i) 
0      0 
1      1 

を今すぐ次の行のために、f(i-1)f(i-2)はの一部で調べることができすでに記入表:

 
i f(i-1) f(i-2) f(i) 
0      0 
1      1 
2  1  0  1 
 
i f(i-1) f(i-2) f(i) 
0      0 
1      1 
2  0  1  1 
3  1  1  2 

など

+0

@Wilhelm Van Onsem詳細な対応に感謝します。私が3のときにf(i-1)を1にする方法は?確かに3-1は2?私はこれが私の問題の中心にあると思います。 – MissDizy

+0

'3-1 'は確かに' 2'なので、 'f(2)'( 'i = 2'の右側の列は' 1'です。 –