分析程序调用几次函数

本文通过具体的示例解析了一个递归函数的调用次数,并详细分析了使用fork函数创建进程的过程及数量。通过图形化的展示方式,帮助读者更好地理解递归调用和进程创建的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int f(int x)
 { if(x<=2)
     return 1;
   return f(x-2)+f(x-4)+1;
}

当x=10时候,程序共调用几次?

分析:针对这样的题目在别的地方看到的比较好的方法是用树来表示 


                                     10 


                             8                  6 


                       6         4        4       2 


                   4     2    2  0    2   0 


                2   0 


图中树的节点数是15,所以是调用了15次 




int main() {
fork()||fork();
}

共创建了几个进程?

分析:首先,第一个fork()执行后,产生一个父进程的副本(返回值为子进程ID)和一个子进程(返回值为0),如下图所示,由||知道,父进程的左分支终止,继续执行右分支的分裂,再产生一个子进程的副本和一个子进程,即下图中的子1,因此总共产生了3个进程,如图中的圈圈


注意:圆圈才是创建的进程,而非圆圈部分是进程的副本而已,并不是创建的,而是复制的。



分析二 : 一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。


子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值