Fibonacci number (C/C ++, Scheme)

Source: Internet
Author: User

Fibonacci number (C/C ++, Scheme)
I. background

Fibonacci number definition:
F0 = 0
F1 = 1
Fi = fi −1 + fi −2 (I> 1)

Ii. Analysis

I reference two tables. You can see them at a glance.

1. Recursion

(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. Iteration

(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

The core of recursion is: Constantly returning to the starting point.
The core of iteration is to constantly update parameters.

In the following code, the core of recursion is the sum operation. sum is constantly multiplied. Although the values are different, the form and meaning are the same.

The core of iteration is the constant updating of product and counter. In the preceding table, product is the first parameter of factorial, and the second parameter is counter, which is constantly updated by adding 1.

Product <-counter * product
Counter <-counter + 1

Iii. Code

C Language

#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);}
    
   
  
Iv. Advanced

Scheme language edition

(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)))

 

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.