C语言实现递归算法

C语言实现递归算法
递归算法是运用于函数调用中的。
递归的概念:在一个函数体内调用自身称为函数的递归调用。
递归调用的原理:需要在函数内满足一定的条件后不在调用自身或者结束,或者调用其它函数,
否则容易出现类似死循环的情况,程序将瘫痪。
已知f(1) = 1f(0) = 0,fn(n) = f(n-1) + f(n-2),f(5)为多少?
第一步,把5带入递归公式中得到f(5) = f(4) + f(3),此时f(4)以及f(3)仍然属于未知,必须继续求f(4)f(3)
第二步,把4带入递归公式中得到f(4) = f(3) + f(2)
第三步,把3带入递归公式中等到f(3) = f(2) + f(1)

第四步,把2带入递归公式中得到f(2) = f(1) + f(0)

第五步,此时
f(0)

f(1)
都是已知的,然后下一步将它们一级一级代入到以上的公式中,逐
一求出
f(2)

f(3)

(4)
,最后求出结果
f(5)

 
求阶乘
n

= n*(n-1)*(n-2)*…*2*1

首先定义最终终止条件
f(1) = 1

然后定义递归公式
f(n) = f (n)*f(n-1)

#include<stdio.h>
int fn(int a);
void main()
{
 int sum;
 sum = fn(3);
 printf(“%d/n”,sum);
}

int fn(int a)
{
 if(a == 1)
 {
  return 1;
 }
 else
 {
  a = a*fn(a-1);
  return a;
 }

}
 
斐波那契数列是第一和第二个数都为
1
,后面的数都是前两个数相加的和得到的。如
(
1
,
1
,2,3,5,…)
求斐波那契数列的前
10
个数。
首先定义最终终止条件
f(1)=1,f(2)=1;
然后定义递归公式中
f(n)=f(n-1)+f(n-2)

#include<stdio.h>
int fn(int a);
void main()
{
 int sum;
 sum = fn(7);
 printf(“%d”,sum);
}

int fn(int a)
{
 if(a<=2 && a>0)
 {
  return 1;
 }
 else if(a>2)
 {
  a = fn(a-1) +fn(a-2);
  return a;
 }
}

 
有一个农场在第一年的时候买了一头刚出生牛,这头牛在第四年的时候就能生一头小牛,以后每
年这头牛就会生一头小牛。这些小牛成长到第四牛又会生小牛,以后每年同样会生一头牛,假设
牛不死,如此反复。请问
50
年后,这个农场会有多少头牛?
首先定义最终终止条件
f(4)=1;
然后定义递归公式中
f(n)=f(n-1)+f(n-3)
#include<stdio.h> int fn(int a); void main()

{

 int i;

 i = fn(20);

 printf(“%d/n”,i);

} int fn(int a)

{

 if (a<4 && a>0)

 {

  return 1;

 } 

 else if(a>=4)

 {

  a = fn(a-1) + fn(a-3);

  return a;

 }

}  
有个莲花池里起初有一只莲花,每过一天莲花的数量就会翻一倍。假设莲花永远不凋谢,
30
天的
时候莲花池全部长满了莲花,请问第
23
天的莲花占莲花池的几分之几?
首先定义最终终止条件
f(1)=1;
然后定义递归公式中
f(n)=f(n-1)*2
#include<stdio.h> int fn(int a); void main()

{

 int a;

 int b;

 double c;

 a = fn(30);

 b = fn(23);

 c = (double)b/a;

 printf(“%.20lf/n”,c);

} int fn(int a)

{

 if(a == 1)

 {

  return 1;

 }

 else

 {

  a = fn(a-1)*2;

  return a;

 }

}
 

    原文作者:递归算法
    原文地址: https://blog.csdn.net/ipistaoye/article/details/1252896
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞