Probability of not getting two consecutive heads together in N tosses of coin

Given a fair coin which is tossed N times, the task is to determine the probability such that no two heads occur consecutively.

Examples:

Input: N = 2
Output: 0.75
Explanation:
When the coin is tossed 2 times, the possible outcomes are {TH, HT, TT, HH}.
Since in 3 out of 4 outcomes, heads don’t occur together.
Therefore, the required probability is (3/4) or 0.75

Input: N = 3
Output: 0.62
Explanation:
When the coin is tossed 3 times, the possible outcomes are {TTT, HTT, THT, TTH, HHT, HTH, THH, HHH}.
Since in 5 out of 8 outcomes, heads don’t occur together.
Therefore, the required probability is (5/8) or 0.62

Approach: The following observation on the number of favourable outcomes has to be made.



  • When N = 1: The possible outcomes are {T, H}. There are two favourable outcomes out of two.
  • When N = 2: The possible outcomes are {TH, HT, TT, HH}. There are three favourable outcomes out of four.
  • When N = 3: Similarly, the possible outcomes are {TTT, HTT, THT, TTH, HHT, HTH, THH, HHH}. There are five favourable outcomes out of eight.
  • When N = 4: Similarly, the possible outcomes are {TTTT, TTTH, TTHT, THTT, HTTT, TTHH, THTH, HTHT, HHTT, THHT, HTTH, THHH, HTHH, HHTH, HHHT, HHHH}. There are eight favourable outcomes out of sixteen.

Clearly, the number of favourable outcomes follow a Fibonacci series where Fn(1) = 2, Fn(2) = 3 and so on. Therefore, the idea is to implement the Fibonacci sequence in order to find the number of favourable cases. Clearly, the total number of cases are 2N.

To calculate the probability, the following formula is used:

P = favourable cases / Total number of cases

Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python implementation to find the 
# probability of not getting two 
# consecutive heads together when
# N coins are tossed
  
  
import math
  
# Function to compute the N-th
# Fibonacci number in the 
# sequence where a = 2 
# and b = 3
def probability(N): 
  
    # The first two numbers in 
    # the sequence are initialized
    a = 2
    b = 3
  
    # Base cases
    if N == 1
        return a
    elif N == 2
        return b
    else
          
        # Loop to compute the fibonacci 
        # sequence based on the first
        # two initialized numbers
        for i in range(3, N + 1): 
            c = a +
            a =
            b =
        return
  
# Function to find the probability 
# of not getting two consecutive 
# heads when N coins are tossed
def operations(N):
  
    # Computing the number of
    # favourable cases
    x = probability (N)
  
    # Computing the number of 
    # all possible outcomes for 
    # N tosses 
    y = math.pow(2, N)
  
    return round(x / y, 2)
  
# Driver code
if __name__ == '__main__'
  
    N = 10
      
    print(operations(N))
     

chevron_right


Output:

0.14

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.