码迷,mamicode.com
首页 > 其他好文 > 详细

初探递归

时间:2015-01-24 01:32:16      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

初探递归

初探递归

;; 递归版本
(define (fib n)
  (cond ((= n 0) 0)
        ((= n 1) 1)
        (+ (fib (- n 1))
           (fib (- n 2)))))

;; 递归优化
(define (fib n)
  (fib-iter 1 0 n))
(define (fib-iter a b n)
  (if (= n 0)
      b
      (fib-iter (+ a b) a (- n 1))))    ; 循环往左推
int fib_iter(int a, int b, int n) {
    if (n == 0) {
        return b;
    } else {
        b = a + b;
        return fib_iter(b, a, n - 1);
    }
}

int fib(int n) {
    return fib_iter(1, 0, n);
}
int fib(int n) {
    int a = 0;
    int b = 1;

    if (n == 1) {
        return 0;
    } else if (n == 2) {
        return 1;
    }

    for (int i = 3; i <= n; i++) {
        int c = a;              // 保留之前的a
        a = b;                  // 让a推进一位
        b = b + c;
    }
}

for循环就是个递归來的。仔细看第二段代码和第三段代码。


Date: 2015-01-24 00:24:46

Author: sunx

Created: 2015-01-24 Sat 00:38

Emacs 24.4.3 (Org mode 8.2.10)

Validate

初探递归

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4245326.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!