今天给各位分享c语言中的函数递归调用函数返回值的知识,其中也会对c语言递归函数的概念及用法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、C语言函数的返回值(递归)2、C语言 函数返回值递归调用3、菜鸟求助—C语言递归函数返回值
C语言函数的返回值(递归)
int hehe(int n) {
if(n=1) return 1;
return n * hehe(n-1);
}
我们一点一点来看:
首先 n = 0 传入,if条件满足 返回 hehe(0) = 1
在传入 n = 1, if条件还是满足 返回 hehe(1) = 1
我们传入参数 n = 2, if 条件不满足 hehe(2) = 2 * hehe( 2 – 1 )= 2 * 1
在我们传入 n =3 , if条件不满足 hehe(3) = 3 * hehe(2) == 3 * 2 * 1
你继续这个步骤 ,对任何正整数n
hehe(n) = n * hehe(n-1) = n * (n-1) * ……* 1
明白了吗?!
C语言 函数返回值递归调用
int
fun(int
n)
定义函数fun
{if
(n1)
return
n*fun(n-1);
如果n1,函数
返回值
为n*fun(n-1)
else
return
1;
}
否则为1;
main()
主函数
{int
i,s=0;
整型i,s,其中s=0
for(i=1;i=4;i++)
i小于等于4时,运行s+=fun(i),然后i自加
s+=fun(i);
s等于s加上函数fun的返回值
printf(”%d\n”,s);
}
打印s
最后结果为s=1+2*1+3*2*1+4*3*2*1
菜鸟求助—C语言递归函数返回值
…
从汇编的角度来说,函数
返回值
,其实就是函数返回后,cpu中eax的值。在C语言等语方中,在函数中写了返回语句,那么函数在返回时,就会对eax作最后赋值。
int
find(int
a,int
b)
{
if(b=0)
return
100;
else
find(–a,–b);/这里为什么不用返回值?/
}
//为什么不用返回值呢,因为此程序进行递归后,在最初返回时,eax的值被赋值为100,而之后的回溯过程中,程序并没有修改eax的值,所以到最后,返回值还是100。
这种写法是会出问题的。应写成。
int
find(int
a,int
b)
{
if(b=0)
return
100;
else
return
find(–a,–b);
}
为什么了修改之后就出错呢,如以上所说,这很好理解,因为程序最后调用了printf()。eax中的值是printf()的返回值。若把他当成find()的返回值自然是出错了。
c语言中的函数递归调用函数返回值的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言递归函数的概念及用法、c语言中的函数递归调用函数返回值的信息别忘了在本站进行查找喔。