c语言函数的递归应用
发布网友
发布时间:2022-05-29 09:48
我来回答
共4个回答
热心网友
时间:2023-10-14 23:40
我解释下具体执行过程:
printf("%d!=%ld\n",num,mul(num));
这里调用了mul(num)方法,第一个值是5,进入方法后,
if(5>1) x=5*mul(5-1);
这里又调用了一次方法,
mul(5-1)
这里就是递归调用了,需要把4的值带入方法又执行一次,
变成:if(4>1) x=4*mul(4-1);
这里又调用了一次方法,
mul(4-1)
依次类推为:if(3>1) x=3*mul(3-1);
if(2>1) x=2*mul(2-1);
这里看懂了没,递归函数关键字在“递”和“归”,相当于循环,一直到条件不满足时在“归”,一步步return直到第一个调用的mul方法。在return主函数。
也就是从最后一次调用
mul(2-1)时
n的值为1了,执行else语句,结束“递”方法操作,return语句,返回X=1,那么接下来变为
if(2>1) x=2*1,返回X=2,接下来变为:
if(3>1) x=3*2,返回X=6,接下来变为:
if(4>1) x=4*6,返回X=24,接下来变为:
if(5>1) x=5*24,返回X=120 结束递归调用。
希望你能看懂,还有问题在补充吧!
热心网友
时间:2023-10-14 23:40
递归方法的概念
类方法成员间允许相互调用,也可以自己调用自己。类的方法如果在方法体内直接或间接地自己调用自己就称为递归方法。
递归基本思想就是“自己调用自己”。递归方法实际上体现了“依此类推”、“用同样的步骤重复”这样的思想,它可以用简单的程序来解决某些复杂的计算问题。
递归调用在完成阶乘运算、级数运算、幂指数运算等方面特别有效。
在执行递归操作时,C#语言把递归过程中的信息保存在堆栈中。如果无限循环地递归,或者递归次数太多,则产生“堆栈溢出”错误
例:用递归方法求阶乘。利用的数学公式为n!=n*(n-1)!。当n=0时,n!=1。
代码如下:
public long F(int n)
{
if (n==1)
return 1;
else
return n*F(n-1);
}
热心网友
时间:2023-10-14 23:41
函数名: tmpfile
功 能: 以二进制方式打开暂存文件
用 法: FILE *tmpfile(void);
程序例:
#include
#include
int main(void)
{
FILE *tempfp;
tempfp = tmpfile();
if (tempfp)
printf("Temporary file created\n");
else
{
printf("Unable to create temporary file\n");
exit(1);
}
return 0;
}
函数名: tmpnam
功 能: 创建一个唯一的文件名
用 法: char *tmpnam(char *sptr);
程序例:
#include
int main(void)
{
char name[13];
tmpnam(name);
printf("Temporary name: %s\n", name);
return 0;
}
函数名: tolower
功 能: 把字符转换成小写字母
用 法: int tolower(int c);
程序例:
#include
#include
#include
int main(void)
{
int length, i;
char *string = "THIS IS A STRING";
length = strlen(string);
for (i=0; i {
string[i] = tolower(string[i]);
}
printf("%s\n",string);
return 0;
}
函数名: toupper
功 能: 把字符转换成大写字母
用 法: int toupper(int c);
程序例:
#include
#include
#include
int main(void)
{
int length, i;
char *string = "this is a string";
length = strlen(string);
for (i=0; i {
string[i] = toupper(string[i]);
}
printf("%s\n",string);
return 0;
}
函数名: tzset
功 能: UNIX时间兼容函数
用 法: void tzset(void);
程序例:
#include
#include
#include
int main(void)
{
time_t td;
putenv("TZ=PST8PDT");
tzset();
time(&td);
printf("Current time = %s\n", asctime(localtime(&td)));
return 0;
}
热心网友
时间:2023-10-14 23:42
执行x=n*mul(n-1)时不是还要将n-1带入原函数中吗?
n=5 x=n*mul(n-1)-->n*mul(4)-->n=4带入
n=4 x=n*mul(n-1)-->n*mul(3)-->n=3带入
n=3 x=n*mul(n-1)-->n*mul(2)-->n=2带入
n=2 x=n*mul(n-1)-->n*mul(1)-->n=1带入
n=1 x=1-->1返回 n=2时的x=n*mul(n-1)
n=2 x=n*2=2返回 n=3时的x=n*mul(n-1)
n=3 x=n*3=6返回 n=4时的x=n*mul(n-1)
n=4 x=n*4=24返回 n=5时的x=n*mul(n-1)
n=5 x=n*5=120返回主程序