斐波那契數的定義:
我引用兩張表,大家一看便懂。
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)))