一、斐波那契数列【Java版】
斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …
1.递归实现波那契数列
/**
*斐波那契数列递归
* F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
* @param index
* @return
*/
public static int getFib(int index) {
if (index < 2) {
return index == 0 ? 0 : 1;
}
return getFib(index - 1) + getFib(index - 2);
}
2.变量实现斐波那契数列
/**
* 实现方式,基于变量实现
* @param index
* @return
*/
public static int getFib(int index) {
if (index < 0) {
return -1;
}else if(index==1||index==2){
return 1;
}else {
int a=0,b=1,c=1;
for(int j=3;j<=index;j++){
c=a+b;
a=b;
b=c;
}
return c;
}
}
2. 数组实现斐波那契数列
/**
* 返回斐波那契数第n个值,n从0开始
* 基于数组实现
* @param n
* @return
*/
public static int getFib(int n){
if(n < 0){
return -1;
}else if(n == 0){
return 0;
}else if (n == 1 || n == 2){
return 1;
}else{
int[] fbi= new int[n];
fbi[2]=1;
fbi[1]=1;
for(int i = 3; i < n; i++){
fbi[i]=fbi[i-1]+fbi[i-2];
}
return fbi[n-1];
}
}
3.栈实现斐波那契数列
/**
* 返回斐波那契数第n个值,n从0开始
* 基于栈实现
* @param n
* @return
*/
public static int getFib(int n){
if(n < 0){
return -1;
}else if(n == 0){
return 0;
}else if (n == 1 || n == 2){
return 1;
}else{
Stack<Integer> fbi= new Stack<Integer>();
fbi.push(1);
fbi.push(1);
for(int i = 3; i <= n; i++){
int front1 = fbi.pop();
int front2 = fbi.pop();
fbi.push(front1);
fbi.push(front2);
fbi.push(front1+front2);
}
return fbi.pop();
}
}
一、递归求一个自然数的阶乘【C语言版】
#include<stdio.h>
extern int getFactorial();
int main() {
int f = 5;
int result= getFactorial(f);
printf("----->自然整数%d的阶乘为:%d \n",f,result);
system("pause");
return 0;
}
/**
*递归求一个数的阶
*/
int getFactorial(int i) {
if (i > 1) {
return i * getFactorial(i - 1);
}
return i;
}