递推法c语言
1. 有关c语言用递推方法的问题
递推算法是一种用若干步可重复运算来描述复杂问题的方法.递庆兄念推是尘颤序列计算机中的一种常用算法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定象的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。
【例】
植树节那天,有五位同学参加了植树活动,他们完成植树的棵树都不相同。问第一位同学植了多少棵时,他指着旁边的第二位同学说比他多植了两棵;追问第二位同学,他又说比第三位同学多植了两棵;... 如此,都说比另一位同学多植两棵。最后问到第五位同学时,他说自己植了10棵。到底第一位同学植了多少棵树?
分析:设第一位同学植树的棵树为a1,欲求a1,需从第五位同学植树的棵数a5入手,根据“多两棵”这个规律,按照一定顺序逐步进行推算:
(1) a5=10;
(2) a4=a5+2=12;
(3) a3=a4+2=14;
(4) a2=a3+2=16;
(5) a1=a2+2=18;
使用这种方法,
第一步先例举一些关系式,找到规律,或者说找到通项公式
第二步找到结束程序誉困的条件值
找到后直接用
if(结束条件)
return 结束时的值
else 通项公式
return 最后的返回值
把这个直接填到被调函数里面就可以了
2. c语言中递推与递归如何区分
递推指的是一个函数中一个量的值要有其他的几个变量或函数得到,比如 function()是一个函数,在另一个函数里面要用到它时,如下 int add() {int a; a=function() }这就是递推。而递握燃败归指的是同一个函数段颤段姿的反复调用。比如去求一个数n的阶乘时int jiec(n) {int n; int m; m=n*jiec(n-1); return jiec(n-1); }
3. C语言递推流程图,有一堆不知数量的桃子,猴子第一天吃掉一半,觉得不过瘾,又多吃了一个;
欲解答这个题,首先理顺思路。解答这个题,可以用倒推法,亦可用正推法,把数学问题解决了,在编程就不难了。
这个题,用倒推法比较简单;推理如下:
"到第10天早上,猴子发现只剩一个桃子了",说明第九天只有4个桃子(吃掉一半加1,也就是吃掉3个,到第十天就只剩下1个了嘛),所以第八天只有桃子(4+1)乘以2,也就是10个桃子(吃掉一半加1,也就是6个就只剩下4个)…… ……找到规律就可以计算了。
规律:吃掉了一半多一个,那么剩下的就是比一半少一个了。
1.第九天有桃子(1+1)×2=4 个
2.第八天:(4+1)×2=10
3.第七天:(10+1)×2=22
4.第六天:(22+1)×2=46
5.第五天:(46+1)×2=94
6.第四天:(94+1)×2=190
7.第三天:(190+1)×2=382
8.第二天:(382+1)×2=766
9.第一天:(766+1)×2=1534
附程序:
#include<stdio.h>
void main()
{
int i,sum=1;
for (i=1;i<=9;i++)
sum=(sum+1)*2;
printf("桃子总数为:%d\n",sum);
}
4. C语言用递推和递归两种算法完成斐波那契数列的计算,给一下代码
//递归法
int fibo1(int n)
{
if( n == 1 || n == 2) return 1;
else return fibo1(n-1)+fibo1(n-2);
}
//递推法
int fibo2(int n)
{
int f0=1,f1=1,f;
if (n<2)
return 1;
for(int i=2;i<n-1;i++)
{
f=f0+f1;
f0=f1;
f1=f;
}
return f;
}
区别:递推是直接使用已知的条件晌谨袭去推出未知的条件;递归则晌猜是将大问题逐渐转化为若干个相同的子问题,直到得到已知的最小子问题,再回溯依次得到父问题的答案。是由未知到已知,再从已知到未知。对于复杂的问题,递归把问题简单化,读起宴兄来易懂。
5. C语言 利用递推法计算X的y次方
double p(double x, int y){
if(y==0)
return 1.0;
return x*p(x, y-1);
}
int main(){
printf("%d", p(2.5,3));
return 0;
}