递归算法
#include <stdio.h>
void main()
{
/*
说明:这个数列有如下特点:第1数为1,第2个数为1。从第3个数开始,该数是其前面两个数的和。即
F1 = 1 (n=1)
F2 = 1 (n=2)
Fn = Fn-1 + Fn-2(n> =3)
*/
int i,fibo[30]={1,1}; //声明变量和数组并为数组第0、1个赋值
for(i=2;i <30;i++)
{
fibo[i]=fibo[i-1]+fibo[i-2]; //用前两个数相加的结果赋值
}
for(i=0;i <30;i++)
{
printf( "%d\n ",fibo[i]);
}
}
void main()
{
/*
说明:这个数列有如下特点:第1数为1,第2个数为1。从第3个数开始,该数是其前面两个数的和。即
F1 = 1 (n=1)
F2 = 1 (n=2)
Fn = Fn-1 + Fn-2(n> =3)
*/
int i,fibo[30]={1,1}; //声明变量和数组并为数组第0、1个赋值
for(i=2;i <30;i++)
{
fibo[i]=fibo[i-1]+fibo[i-2]; //用前两个数相加的结果赋值
}
for(i=0;i <30;i++)
{
printf( "%d\n ",fibo[i]);
}
}
经典例题:递归,不停在同一条公式上调用本身,直至赋值给它跳出循环。
3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
答:public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i - 2);
}
}