Find nth element of Stern’s Diatomic Series in C++

In this article, we will learn how to find the nth element of Stern’s Diatomic Series in C++.

Stern’s Diatomic Series is a sequence 1, 1, 2, 1, 3, 2, 3, 1, 4, 3, 5 …. which emerges in the Calkin-Wilf tree. It is in some cases otherwise called the fusc function.

In mathematical notation, the nth term can be given by recurrence equation

s(n) = s(n/2)                                             for n even

s(n) = s((n-1)/2)+ s((n+1)/2)                for n odd

where s(0) = 0, s(1) = 1

Stern’s Diatomic Series in C++

We are going to solve this problem using dynamic programming.

1. Create a dynamic array of size n+1. Initialize the dp[0] to 0 and do[1] to 1.

2. Iterate the array for range (2, n)

  • If n is even then set dp[i] = dp[i/2].
  • Else set dp[i] = dp[(i-1)/2]+dp[(i+1)/2]

3. Finally, return dp[n].

#include <bits/stdc++.h>
using namespace std;
int Sterns_Diatomic_Series(int n){
    int dp[n+1];
    dp[0] = 0;
    dp[1] = 1;
    for(int i=2;i<=n;i++){
        if (i%2 == 0)
            dp[i] = dp[i/2];
        else
            dp[i] = dp[(i-1)/2]+dp[(i+1)/2];
    }
    return dp[n];
}
int main(){
    int n;
    cout<<"Enter the n value: ";
    cin>>n;
    cout<<"The nth element of Sterns Diatomic Series is "<<Sterns_Diatomic_Series(n);
    return 0;
}

Output

Enter the n value: 20
The nth element of Sterns Diatomic Series is 3

Enter the n value: 15
The nth element of Sterns Diatomic Series is 4

Also, read

Leave a Reply

Your email address will not be published. Required fields are marked *