c语言函数的递归调用?

Fibonacci数由小到排列后具有以下特点:前二项均为1,从第三项时,每项等于前二项的和。编写函数funA(n),用于返回一个不小于n的最小的一个Fibonacci数。
主函数如下:
main()
{ int n;
scanf("%d",&n);
printf("%d",funA(n));
}

第1个回答  2020-06-15
递归有一个堆栈的概念,那就意味着他是一个反理解的过程:就象数学递推一样,你知道第一项,第二项,又知道通项公式,那你就可以知道任何一项。
然后你看代码:fun(0)==0,fun(1)==1;是告诉你一二项。
fun(n)==fun(n-1)+fun(n-2);是告诉你通项公式。那么,你就可以知道任何一项。你这样理解就差不多了,具体机器是怎么操作的,那很复杂的,也不需要明白!!!!
第2个回答  2019-06-23
是的,局部变量会新定义一次,不过仅局限于局部变量(全局变量和静态变量都是全局的,要是还没学暂时不用管)。
并不能说是“同时”,应该说是“同样”,时间上肯定是按照调用的先后顺序的。
递归确实会让程序变慢,但只是相对于不需要递归的等价代码。而且原因也不是内存分配导致的,而是因为函数调用产生的。追问

我后面写的这个总是得到错误答案,我觉得我还是没搞明白,可以帮忙看一哈吗

本回答被网友采纳
第3个回答  2019-09-13
递归:就是函数自己调用自己,然后在函数体内设一个终止递归的条件。
比如:
void
func(int
num)
{
if
(num
<=
0
)//这里是终止条件,要不就一直递归下去,程序就OVER了。
return;
printf("%d",
num);
func(--num);//这里自己调用自己。
}
void
main(void)
{
func(10);//猜猜结果是什么。
}
第4个回答  2019-06-25
你这个不是递归调用吧。两个函数的名字都不一样,这个方法的原理是x*y=gbs(x,y)*gys(x,y)。就是两个数的乘积等于它们的最大公约数和最小公倍数的乘积。
第5个回答  2020-05-11
第四句应该是
if(n==0||n==1)
吧!
还有printt里fac(a)后面括号里多了一个分号!
相似回答