有关C语言用递推方法的问题
发布网友
发布时间:2022-07-31 10:56
我来回答
共4个回答
热心网友
时间:2024-05-08 19:34
递推算法是一种用若干步可重复运算来描述复杂问题的方法.递推是序列计算机中的一种常用算法。它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定象的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。
【例】
植树节那天,有五位同学参加了植树活动,他们完成植树的棵树都不相同。问第一位同学植了多少棵时,他指着旁边的第二位同学说比他多植了两棵;追问第二位同学,他又说比第三位同学多植了两棵;... 如此,都说比另一位同学多植两棵。最后问到第五位同学时,他说自己植了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 最后的返回值
把这个直接填到被调函数里面就可以了
热心网友
时间:2024-05-08 19:35
你这个程序是用来求废品垃圾数列的吧?
把fun函数改一改,完整代码:
#include <stdio.h>
int fun(int n)
{
int s;
if(n==1||n==2)
s=1;
else
s=fun(n-1)+fun(n-2);
return s;
}
main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
}
热心网友
时间:2024-05-08 19:35
for(i=1;i<n;i++)
s=fun(i)+fun(i+1)
你理解错了吧
递归是从n到1, 递推是从1到n. 应该用数组来弄吧
斐波那契数列只能这样做
#include "stdio.h"
int fun(int m){
if(m ==1 ){
return 1;
}
else if(m == 2){
return 1;
}
else{
return fun(m - 1)+fun(m - 2);
}
}
main(){
int i;
int n;
int result;
printf("要输入前几项的结果?\n");
scanf("%d",&n);
printf("结果是\n");
for(i=1;i<=n;i++){
result = fun(i);
printf("%d ",result);
}
printf("\n");
}
热心网友
时间:2024-05-08 19:36
你是不是看错题了?你不是说是递推吗?但是你的程序是用递归算法。
如果你用递归的话,如果n大一点估计只能用曙光超级计算机才能算出结果。
另外这一句有问题:
for(i=1;i<n;i++)
s=fun(i)+fun(i+1);
你的意思是:
for(i=1;i<n;i++)
s+=fun(i)+fun(i+1);
按我的理解这个问题应该是用递推算法的,但是不知道具体问题,所以不能给出代码,或者稍候联系?
下面是我猜题意的
#include <stdio.h>
#define MAX 10000 //n的最大取值范围
void fun(int n,int * FUN)
{
int i;
FUN[1]=1;
FUN[2]=1;
for (i=3; i<MAX; i++)
FUN[i]=FUN[i-1]+FUN[i-2];
}
int main()
{
int n, FUN[MAX];
fun(MAX, FUN);
scanf("%d", &n);
printf("%d\n", FUN[n]);
}