设为首页 加入收藏

TOP

斐波那契数(C/C++,Scheme)
2015-11-21 01:01:10 来源: 作者: 【 】 浏览:2
Tags:那契数 C/C Scheme

一、背景

斐波那契数的定义:
f0=0
f1=1
fi=fi?1+fi?2(i>1)

二、分析

我引用两张表,大家一看便懂。

1.递归

(factorial 6)
(* 6 (factorial 5))
(* 6 (* 5 (factorial 4)))
(* 6 (* 5 (* 4 (factorial 3))))
(* 6 (* 5 (* 4 (* 3 (factorial 2)))))
(* 6 (* 5 (* 4 (* 3 (2 (factorial 1))))))
(* 6 (* 5 (* 4 (* 3 (* 2 1)))))
(* 6 (* 5 (* 4 (* 3 2))))
(* 6 (* 5 (* 4 6)))
(* 6 (* 5 24))
(* 6 120)
720

2.迭代

(factorial 6)
(factorial 1 1 6)
(factorial 1 2 6)
(factorial 2 3 6)
(factorial 6 4 6)
(factorial 24 5 6)
(factorial 120 6 6)
(factorial 720 7 6)
720

递归的核心在于:不断地回到起点。
迭代的核心在于:不断地更新参数。

在下面的代码中,递归的核心是sum的运算,sum不断的累乘,虽然运算的数值不同,但形式和意义一样。

而迭代的核心是product和counter的不断更新。如上表中,product就是factorial的前2个参数不断的累乘更新成第一个参数;而第二个参数则是counter,其不断的加1来更新自己。

product <- counter * product
counter < - counter + 1

三、代码

C语言

#include 
   
     #include 
    
      int factorialRecursive(int n); int factorialIteration(int product, int counter, int max_count); int main() { int n; printf(Enter an integer: ); scanf(%d,&n); printf(%d ,factorialRecursive(n)); printf(%d ,factorialIteration(1,1,n)); return 0; } int factorialRecursive(int n) { int sum=1; if(n==1) sum*=1; else sum=n*factorialRecursive(n-1); return sum; } int factorialIteration(int product, int counter, int max_count) { int sum=1; if(counter>max_count) sum*=product; else factorialIteration((counter*product),(counter+1),max_count); }
    
   

C++语言版

#include 
   
     using namespace std; int factorialRecursive(int n); int factorialIteration(int product, int counter, int max_count); int main() { int n; cout<
    
     >n; cout<
     
      max_count) sum*=product; else factorialIteration((counter*product),(counter+1),max_count); }
     
    
   

四、进阶

Scheme语言版

(define (factorial n)
    (if (= n 1)
        1
        (* n (factorial (- n 1)))))
(define (factorial n)
    (fact-iter 1 1 n))
(define (fact-iter product counter max-count)
    (if (> counter max-count)
        product
        (fact-iter (* counter product)
                   (+ counter 1)
                   max-counter)))

?

?
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇线段树 单点更新查询 区间最大值 .. 下一篇HDU ACM 1272 小希的迷宫

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: