Padovan 数列类似于具有类似递归结构的斐波那契数列。递归公式是,
P(n) = P(n-2) + P(n-3)
P(0) = P(1) = P(2) = 1
斐波那契数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55……
边长遵循斐波那契数列的正方形螺旋。
Padovan 序列: 1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37,…..
边长遵循 Padovan 数列的等边三角形的螺旋。
例子:
For Padovan Sequence:
P0 = P1 = P2 = 1 ,
P(7) = P(5) + P(4)
= P(3) + P(2) + P(2) + P(1)
= P(2) + P(1) + 1 + 1 + 1
= 1 + 1 + 1 + 1 + 1
= 5
C++
// C++ program to find n'th term in Padovan Sequence
// using Dynamic Programming
#include
using namespace std;
/* Function to calculate padovan number P(n) */
int pad(int n)
{
/* 0th ,1st and 2nd number of the series are 1*/
int pPrevPrev = 1, pPrev = 1, pCurr = 1, pNext = 1;
for (int i=3; i<=n; i++)
{
pNext = pPrevPrev + pPrev;
pPrevPrev = pPrev;
pPrev = pCurr;
pCurr = pNext;
}
return pNext;
}
/* Driver Program */
int main()
{
int n = 12;
cout << pad(n);
return 0;
}
Java
// Java program to find n'th term
// in Padovan Sequence using
// Dynamic Programming
import java.io.*;
class GFG {
/* Function to calculate
padovan number P(n) */
static int pad(int n)
{
int []padv=new int[n]; //create array to store padovan values
padv[0]=padv[1]=padv[2]=1;
for (int i = 3; i <= n; i++) {
padv[i]=padv[i-2]+padv[i-3];
}
return padv[n-1];
}
/* Driver Program */
public static void main(String args[])
{
int n = 12;
System.out.println(pad(n));
}
}
/*This code is contributed by Kanjam Bhat Lidhoo.*/
Python
# Python program to find n'th term in Padovan
# Sequence using Dynamic Programming
# Function to calculate padovan number P(n)
def pad(n):
# 0th ,1st and 2nd number of the series are 1
pPrevPrev, pPrev, pCurr, pNext = 1, 1, 1, 1
# Find n'th Padovan number using recursive
# formula.
for i in range(3, n+1):
pNext = pPrevPrev + pPrev
pPrevPrev = pPrev
pPrev = pCurr
pCurr = pNext
return pNext;
# Driver Code
print pad(12)
C#
// C# program to find n'th term
// in Padovan Sequence using
// Dynamic Programming
using System;
class GFG {
/* Function to calculate
padovan number P(n) */
static int pad(int n)
{
/* 0th, 1st and 2nd number
of the series are 1*/
int pPrevPrev = 1, pPrev = 1,
pCurr = 1, pNext = 1;
for (int i = 3; i <= n; i++) {
pNext = pPrevPrev + pPrev;
pPrevPrev = pPrev;
pPrev = pCurr;
pCurr = pNext;
}
return pNext;
}
/* Driver Program */
public static void Main()
{
int n = 12;
Console.WriteLine(pad(n));
}
}
/*This code is contributed by vt_m.*/
PHP
Javascript
输出:
21