c语言递归教程
㈠ c语言怎么用递归调用函数的方法求n的阶乘
1、打开VC6.0软件,新建一个C语言的项目:
㈡ C语言中的递归问题..
楼主的程序和楼上的回答有误。
这里用递归实现连乘,不需要全局变量保存什么信息,递归是用栈来实现语句和返回值的存放,详细原理建议楼主找一本C语言教程里面都有讲。
此外楼主main函数中对fact函数的声明以及fact函数的定义中需要加上参数类型声明。正确的代码如下:
#include <stdio.h>
void main()
{
int i;
int fact(int); // 这里要有函数参数类型声明int
for(i=0;i<5;i++)
printf("\40:%d!=%d\n",i,fact(i));
}
int fact(int j)
{
int sum;
if(j==0)
sum=1;
else
sum=j*fact(j-1); // 函数递归调用
return sum;
}
问题补充:
int fact(int); // 这里要有函数参数类型声明int 但是下面我用的fact(i),而i已经定义为int 型,前面还是一定要先对参数进行定义么~?
在main中的int fact(int);语句是对fact函数进行声明,要声明的原因是编译器对代码编译的时候是从上到下进行扫描的,而fact函数的定义是在main函数之后,因此在main中调用fact(i)之前,必须先声明fact函数,也就是告诉编译器fact函数是个什么样子。
声明的时候必须指明函数的返回类型、函数名、函数参数及类型。因此int fact(int);是必要的。
如果fact函数的定义
int fact(int j)
{
int sum;
if(j==0)
sum=1;
else
sum=j*fact(j-1); // 函数递归调用
return sum;
}
是放在main函数之前的,那么main函数中调用fact(i)之前不需再进行声明,也就是int fact(i);语句可以不加。因为编译器编译到fact(i)调用时已经知道了fact函数的定义。
建议楼主对 变量的“声明”与“定义”、以及 函数的“声明”与“定义”这几个概念要区分一下。
㈢ 讲一下c语言中递归函数的使用方法
相当于循环,要有判断条件,传递进去的参数要变化,满足条件调用自身,不满足条件就开始一层一层返回。简单例子:
int
f(int
i){
int
sum=0;
if(i>0)
sum+=f(i-1);
return
sum;
}
main(){
int
a=10;
printf("%d",f(a));
}
㈣ c语言递归详解
没啥详解,就是函数自己调用自己。整个调用关系会铺在一个栈里。递归函数一定要有一个退出出口。
㈤ c语言递归的方法是什么
思路:使用递归主要有两点需要注意,一个是递归计算公式,二是递归跳出条件。 参考代码: #includeint fun(int n){if(n==0) return 0;//递归跳出条件 return n+fun(n-1);//递归计算公式 }int main(){int n;scanf("%d",&n); printf("%d\n",fun(n)
㈥ C语言的递归过程!
这个东西首先,你要确定递归出口。没有出口,你就算不出结果的。
从你给出的代码片段来看,出口应该是n==0,也就说rfcat(0)=1这样。
那么所谓的第一层到底哪里算第一层呢?
首先程序从主函数开始运行,系统建立了一个存储运行状态的栈。在系统堆栈的最下面,放进main记录。记录下从哪里进入的这个函数。
在运行到rfcat(5)这行时,进入这个rfcat函数。此时,n==5。系统栈里,压入rfcat记录。
然后在函数里,运行到ans=n*rfact(n-1)时,又遇到了rfcat这个函数,此时,将n-1带入了这个函数,“递归”调用函数。此时,又在系统栈里压入了一个rfcat记录。
就这样重复重复,直到发现出口。就是在n==0时,return了一个值,1。这时,这里的return,不仅是代表返回值,更是说在系统栈里的函数结束了,要返回上一个函数里运行。弹出这个记录的同时,得到了进入函数时程序的下一步该进行的动作。
然后就这样一步步的return。直到main的最后的return 0;结束整个程序。
㈦ c语言怎么用递归函数
首先是要这个求解的问题,适合用递归方法来进行求解。找到这个递归解法结束递归的条件。递归函数中,首先第一个语句就是如果满足递归条件,就直接返回确定的值,否则返回使用递归方法求解的表达式。