当前位置:网站首页>1142_ SiCp learning notes_ Functions and processes created by functions_ Linear recursion and iteration
1142_ SiCp learning notes_ Functions and processes created by functions_ Linear recursion and iteration
2022-07-07 07:31:00 【grey_ csdn】
All learning summary :GitHub - GreyZhang/g_SICP: learn SICP and hack lisp.
The first said , The title is named after the translation and adjustment of text information . If combined C language , It is more suitable to call it subfunction or function function combined by subfunction .


This is the opening word of this chapter , But there are some interesting things to think about . such as , As a professional programmer, you need to have a more vivid and specific thinking ability . In the process of becoming a professional , Must learn how to deal with different scenes to deal with the image 、 Specific thinking . We need to describe the whole function in the way of this sub function 、 Global information and behavior . natural , Many sub functions will have their own state information to be maintained .

This is a recursive factorial function implementation , The following figure is a specific description of each step using the replacement method .

And this , It is an iterative implementation and deployment description . Judge the difference between recursion and iteration , The main difference is whether the intermediate state of the program is automatically processed by the parser rather than whether the function is called by itself . This point , I didn't think deeply when dealing with other designs before .
According to this idea , In fact, you can design one according to the gourd and the gourd C Language version of “ Recursive iteration ”:
#include
#include
void fac(uint32_t n, uint32_t *p_counter, uint32_t *p_result)
{
if(*p_counter > n)
{
/* result is stored to the memory @ p_result */
return;
}
else
{
*p_result *= *p_counter;
*p_counter += 1U;
fac(n, p_counter, p_result);
}
}
int main(void)
{
uint32_t n = 5;
uint32_t c = 1U;
uint32_t r = 1U;
fac(n, &c, &r);
printf("result is %d\n", r);
n = 10;
c = 1U;
r = 1U;
fac(n, &c, &r);
printf("result is %d\n", r);
n = 12;
c = 1U;
r = 1U;
fac(n, &c, &r);
printf("result is %d\n", r);
return 0;
}
test :

In the test above , Added one python Comparison of . among ,python Is a completely recursive implementation :
def fac(n):
if n == 1:
return 1
else:
return n * fac(n - 1)
print(fac(5))
print(fac(10))
print(fac(12))
Judging from the test results , Within a certain parameter range , This C The version calculation of is still correct .


As the level of recursion increases , The information that the parser needs to track increases linearly . This process is called linear recursion . As the depth of recursion increases , More and more information needs to be managed and maintained . therefore , The above two processing ideas : Recursion and iteration should not only focus on the processing depth in the replacement model when comparing the resource consumption of their algorithms , We should also pay attention to the horizontal expansion width . Vertical represents mainly time consumption , The horizontal actually involves the consumption of time and storage resources .

But recursion does not necessarily meet such conditions , This is why the recursion discussed here is specifically proposed as linear recursion . And through the expansion of the end part , In fact, there is also a recursive method with basically constant resource consumption , For example, tail recursion . For me, , This is indeed another new concept .
边栏推荐
- Deep learning Flower Book + machine learning watermelon book electronic version I found
- Flexible layout (I)
- 选择商品属性弹框从底部弹出动画效果
- FullGC问题分析及解决办法总结
- 我理想的软件测试人员发展状态
- About some details of final, I have something to say - learn about final CSDN creation clock out from the memory model
- Communication of components
- Asynchronous components and suspend (in real development)
- Hidden Markov model (HMM) learning notes
- 抽絲剝繭C語言(高階)指針的進階
猜你喜欢

虚拟机的作用

Interviewer: what development models do you know?

IP address

外包幹了三年,廢了...

Robot technology innovation and practice old version outline

Reflection (II)

LC interview question 02.07 Linked list intersection & lc142 Circular linked list II

三、高质量编程与性能调优实战 青训营笔记

sql中对集合进行非空校验

I failed in the postgraduate entrance examination and couldn't get into the big factory. I feel like it's over
随机推荐
PostgreSQL source code (60) transaction system summary
JS small exercise
Flexible layout (II)
Mutual conversion between InputStream, int, shot, long and byte arrays
Flexible layout (I)
Dynamics CRM server deployment - restore database prompt: the database is in use
JS small exercise ---- time sharing reminder and greeting, form password display hidden effect, text box focus event, closing advertisement
js小练习----分时提醒问候、表单密码显示隐藏效果、文本框焦点事件、关闭广告
Blue Bridge Cup Birthday candles (violence)
Chinese and English instructions prosci LAG-3 recombinant protein
【Liunx】进程控制和父子进程
外包幹了三年,廢了...
Sqlmap tutorial (IV) practical skills three: bypass the firewall
Initial experience of teambiion network disk (Alibaba cloud network disk)
1089: highest order of factorial
Modify the jupyter notebook file path
抽絲剝繭C語言(高階)數據的儲存+練習
【云原生】内存数据库如何发挥内存优势
FPGA course: application scenario of jesd204b (dry goods sharing)
一、Go知识查缺补漏+实战课程笔记 | 青训营笔记