当前位置:网站首页>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 .
边栏推荐
- 4、 High performance go language release optimization and landing practice youth training camp notes
- Outsourcing for three years, abandoned
- MySQL service is missing from computer service
- 【Liunx】进程控制和父子进程
- Detailed explanation of neo4j installation process
- 组件的嵌套和拆分
- Pass parent component to child component: props
- Jesd204b clock network
- The currently released SKU (sales specification) information contains words that are suspected to have nothing to do with baby
- 电商常规问题part1
猜你喜欢
身边35岁程序员如何建立起技术护城河?
Paranoid unqualified company
mips uclibc 交叉编译ffmpeg,支持 G711A 编解码
MIPS uclibc cross compile ffmpeg, support g711a encoding and decoding
四、高性能 Go 语言发行版优化与落地实践 青训营笔记
[Linux] process control and parent-child processes
Talk about seven ways to realize asynchronous programming
C language (high-level) data storage + Practice
How does an enterprise manage data? Share the experience summary of four aspects of data governance
$refs: get the element object or sub component instance in the component:
随机推荐
记一个并发规则验证实现
PostgreSQL source code (59) analysis of transaction ID allocation and overflow judgment methods
Dynamics CRM server deployment - restore database prompt: the database is in use
虚拟机的作用
Apache AB stress test
Communication of components
Redis data migration
Interviewer: what development models do you know?
Procedure in PostgreSQL supports transaction syntax (instance & Analysis)
English translation is too difficult? I wrote two translation scripts with crawler in a rage
1090: integer power (multi instance test)
BGP experiment (1)
Détailler le bleu dans les tâches de traduction automatique
freeswitch拨打分机号源代码跟踪
js小练习
Model application of time series analysis - stock price prediction
I failed in the postgraduate entrance examination and couldn't get into the big factory. I feel like it's over
How to * * labelimg
How does an enterprise manage data? Share the experience summary of four aspects of data governance
Abnova circulating tumor DNA whole blood isolation, genomic DNA extraction and analysis