为了防止递归调用无终止地进行, 必须在函数内有终止递归调用的手段。常用的办法是加条件判断, 满足某种条件后就不再作递归调用,然后逐层返回。
一个函数在它的函数体内调用它自身称为递归调用。 这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中, 主调函数又是被调函数。执行递归函数将反复调用其自身。 每调用一次就进入新的一层。
已知斐波那契数列第n项的计算公式如下
当n=0时,Fib(n)=0;当n=1时,Fib(n)=1;当n>1时,Fib(n)= Fib(n-1)+ Fib(n-2).
#include <stdio.h>
#define COL 10 //一行输出10个
long scan()
{ //输入求fibonacci函数的第N项
int n;
printf("Input the N = ");
scanf("%d",&n);
return n;
}
long fibonacci(int n)
{ //fibonacci函数的递归函数
if (0==n||1==n) { //fibonacci函数递归的出口
return 1;
}
else {
return fibonacci(n-1)+fibonacci(n-2);
//反复递归自身函数直到碰到出口处再返回就能计算出第n项的值
}
}
int main(void)
{
int i,n;
n = scan();
printf("Fibonacci数列的前%d项/n", n);
for (i=0; i<n;) //输出fibonacci函数前n项每项的值
{
printf("%-10ld",fibonacci(i++)); //调用递归函数并且打印出返回值
if(i%COL==0)
{ //若对COL取余等于0就换行,也就是控制每行输出多少个,
//而COL=10就是每行输出10个
printf("/n");
}
}
printf("/n");
return 0;
}
class Program
{
static int Func(int n)
{
if (n == 0) return 1;
if (n == 1) return 1;
else
return Func(n - 1) + Func(n - 2);
}
static void Main(string[] args)
{
Console.Write("请输入一个数:");
int num = int.Parse(Console.ReadLine());
int sum = 0;
sum = Func(num);
Console.Write("请输出结果:");
Console.Write("{0}", sum);
Console.ReadKey();
}
}