【问题标题】:Fibonacci in Scheme计划中的斐波那契
【发布时间】:2013-01-17 09:59:25
【问题描述】:

我正在尝试理解 Scheme 中的递归,但我很难为它做空运行,例如一个简单的斐波那契数问题。

有人可以为我分解添加发生的步骤吗?

(define (fib n)
  (if (<= n 2)
      1
      (+ (fib (- n 1)) (fib (- n 2)))))

【问题讨论】:

    标签: recursion scheme racket fibonacci


    【解决方案1】:

    如果您使用的是 Racket,正如您的标签所示,那么您有一个内置的步进器。

    将程序输入DrRacket,点击右上角菜单中的Step:

    然后会打开一个步进窗口。点击 Step over and over,就可以遍历程序的执行过程了。

    如果您希望步骤数更易于管理,请选择一个小于 10 的数字来跟踪执行。

    【讨论】:

      【解决方案2】:

      在伪代码中,fib(n) <b>=</b> n &lt;= 2 <b>-&gt;</b> 1 <b>; else -&gt;</b> fib(n-1) + fib(n-2) => (1 1 2 3 5 ...)。

      例如,fib(5) 简化为:

      fib(5)
      fib(4) + fib(3)
      (fib(3) + fib(2)) + fib(3)
      ((fib(2) + fib(1)) + fib(2)) + fib(3)
      ((1 + 1) + fib(2)) + fib(3)
      (2 + fib(2)) + fib(3)
      (2 + 1) + fib(3)
      3 + fib(3)
      3 + (fib(2) + fib(1))
      3 + (1 + 1)
      3 + 2
      5
      

      【讨论】:

        【解决方案3】:

        这是打印斐波那契数列成员从 1 到 n 的代码 每个都在一个新行中。需要注意的是,它使用了两个非常简单的辅助函数。希望这会有所帮助。

        ;Prints to the screen all the member up to the nth member in the fibonaci sequence (define (fibo n)
         (let ((i 1))
          (if (= n 1)
              (display 1)
              (fiboHelp i n))))
        
        ;Helper function that presents Fibonaci sequence from bottom index i until upper index n
        (define (fiboHelp i n)
          (if (= i n)
              (display(fiboMember i))
              (begin
                (display (fiboMember i))
                (newline)
                (fiboHelp (+ i 1)n)))) 
        
        ;Returns the nth member of the Fibonaci sequence
        (define (fiboMember n)
          (if (<= n 2)
              (+ 1 0)
              (+ (fiboMember(- n 1))(fiboMember(- n 2)))))
        

        【讨论】:

          猜你喜欢
          • 2013-02-23
          • 2013-03-31
          • 1970-01-01
          • 2020-01-18
          • 2021-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多