
正文
递归函数与数组结合c语言 递归算法c语言代码
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言问题:运用数组与递归函数的知识求解输入一个整数,输出对应的斐波那契数列
这个不难,我写给你,你自己看一下。
代码:
#include stdio.h //调用头文件
int fib(int num);//函数声明
int main()//主函数
{
int num;
printf(”输入数值:”);
scanf(”%d”,num);
printf(”%d\n”,fib(num));
}
int fib(int num)
{
int result;
if(n==0 || n==1)
result=1
else
result=fib(num-1)+fib(num-2);//递归调用函数
return result;
}
相关问答
Q1: 用c语言编写一个递归函数“int FF(int a【】,int n)”,求出数组a中所有n个元素之积并返回
int abc(int a[],int n)
{
if(n==0)
return a[0];
else return a[n-1]*abc(a[],n-2);
}
或:
int ff(int a[],int n)
{
int sum=0;
int i
for(i=0;in;i++)
{
sum+=a[i];
}
return sum;
}
扩展资料:
数组类型说明 在C语言中使用数组必须先进行类型说明。
数组说明的一般形式为:类型说明符 数组名 [常量表达式],……; 其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
数组就是一次性定义相同数据类型的一组变量数组定义。
参考资料来源:百度百科-数组
Q2: c语言 二维数组 递归函数问题 求高手帮助!!
#include stdio.h
#include stdlib.h
//函数声明
int calculate(int (*a)[8]);
int main(void)
{
int a[8][8] = { {1,1,1,1,1,1,1,1},
{1,1,0,0,1,0,0,1},
{1,0,0,1,0,0,1,1},
{1,1,1,0,0,1,0,1},
{1,0,1,1,1,0,0,1},
{1,1,0,0,0,1,1,1},
{1,1,1,1,0,0,0,1},
{1,1,1,1,1,1,1,1} };
int *p=a[0][0];
int i,j,num;
printf("请输入元素为0的元素的两个下标:");
scanf("%d%d",i,j);
num = calculate( a , p , i , j );
if(num==-1)
{
printf("输入错误!\n");
}
else
{
printf("a[%d][%d] 周围有 %d 个 1 \n",i,j,num);
}
system("pause");
return 0;
}
//函数功能:计算数组中为 0 的元素周围 1 的个数
//函数参数:(*a)[8]为数组名,p为数组首元素地址,i,j 分别为元素的行、列下标
//返回值:m为1的个数
int calculate(int (*a)[8],int *p,int i,int j)
{
static int m=0;
if(p==(a[8][8]) ||a[i][j]==1)
{
return -1;
}
if(p==(a[i-1][j]) || p==(a[i-1][j+1]) || p==(a[i][j+1]) ||p==(a[i+1][j+1]) || p==(a[i+1][j]) ||p==(a[i+1][j-1])
|| p==(a[i][j-1]) || p==(a[i-1][j-1]))
{
m+=*p;
}
calculate(a,p+1,i,j);
return m;
}
不知道这样满意不满意?
Q3: 用递归函数求数组的和(c语言)
#include stdio.h
int add(int *a, int n)
{
if(n==1) return a[0];
return a[0]+add(a+1, n-1);
}
int main()
{
int a[5]={1,3,5,7,9};
printf("%d\n", add(a,5));
return 0;
}
Q4: 求牛人给我讲解下递归函数如何将函数值存到数组中 用c语言 例如北大ACM 1579
又是递归函数与数组结合c语言你....
首先你和1008一样又想先把数据存起来递归函数与数组结合c语言,再一起处理递归函数与数组结合c语言了....这个思路不对,应该是这样递归函数与数组结合c语言的:
while(数据没结束){
初始化变量;
读入数据;
处理数据;
输出结果;
}
再说这个题,这个题递归函数与数组结合c语言我觉得你想问的是记忆化递归要如何记忆。
这题我没做,看下觉得要么是记忆化递归,要么是推导公式。首先你要理解正常的递归做这个题要如何做。你现在的做法正是一般的递归做法。加入记忆化是这样:
int dp[21][21][21];
int w(int a,int b,int c)
{
if(dp[a][b][c])return dp[a][b][c];
if(a=0||b=0||c=0)
return 1;
if (a20||b20||c20)
return w(20,20,20);
if (a b b c)
return dp[a][b][c]=w(a,b,c-1) + w(a,b-1,c-1) - w(a,b-1,c) ;
else
return dp[a][b][c]=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1, b, c-1)- w(a-1, b-1, c-1) ;
}
即每次做完一个结果就把这个结果记录到对应的dp[a][b][c]中,这道题只要a,b,c相同结果就相同
然后在每次左前检查这个a,b,c对应的结果算过没有,算过直接读,没算再去算
递归函数与数组结合c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于递归算法c语言代码、递归函数与数组结合c语言的信息别忘了在本站进行查找喔。






