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;
 }
}
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值