十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
调用过程就是自己调用自己,直到满足退出条件,这个很重要
创新互联建站是一家专注于网站制作、网站建设与策划设计,罗甸网站建设哪家好?创新互联建站做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:罗甸等地区。罗甸做网站价格咨询:13518219792
比如要求5的阶乘,先要求4的阶乘,接着求3的阶乘,。。。最后当n=1时,直接return 1
也就结束了递归。其实很好理解的。。
这段代码中定义了一个递归函数 fun,函数的功能是将输入的参数 x 以二进制形式输出到控制台。具体来说,函数 fun 的实现过程如下:
判断 x/2 是否大于 0,如果成立,则执行下一步操作,否则直接输出 x 的值。
调用 fun(x/2-2),即递归调用自身,将 x/2-2 作为新的参数传递给 fun 函数。
输出 x 的二进制表示。由于在递归调用后,程序会一直执行到当前调用结束,所以输出的顺序是从最高位到最低位。
根据上述描述,当 fun(20) 被调用时,函数将按照如下顺序执行:
fun(20) 调用 fun(8),输出 1。
fun(8) 调用 fun(2),输出 0。
fun(2) 调用 fun(0),输出 1。
fun(0) 直接输出 0。
因此,最终的输出结果为:10100,即二进制下的 20。
因此,选项 B) 2820 是正确答案。
递归函数:
编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。
在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。
函数介绍:
在数理逻辑和计算机科学中,递归函数或μ-递归函数是一类从自然数到自然数的函数,它是在某种直觉意义上是"可计算的" 。事实上,在可计算性理论中证明了递归函数精确的是图灵机的可计算函数。递归函数有关于原始递归函数,并且它们的归纳定义(见下)建造在原始递归函数之上。但是,不是所有递归函数都是原始递归函数 — 最著名的这种函数是阿克曼函数。
其他等价的函数类是λ-递归函数和马尔可夫算法可计算的函数。
例子:
//代码1
void func()
{
//...
if(...)
func();
else
//...
}
条件:
一个含直接或间接调用本函数语句的函数被称之为递归函数,在上面的例子中能够看出,它必须满足以下两个条件:
1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;
2) 必须有一个终止处理或计算的准则。
梵塔的递归函数:
//C
void hanoi(int n,char x,char y,char z)
{
if(n==1)
move(x,1,z);
else
{
hanoi(n-1,x,z,y);
move(x,n,z);
hanoi(n-1,y,x,z);
}
}
相当于循环,要有判断条件,传递进去的参数要变化,满足条件调用自身,不满足条件就开始一层一层返回。简单例子:
int
f(int
i){
int
sum=0;
if(i0)
sum+=f(i-1);
return
sum;
}
main(){
int
a=10;
printf("%d",f(a));
}