目录
一、程序运行的原理
指令:
指令的划分以函数为单位
调用函数的本质是使用call指令,把pc移动到被调用函数
函数调用完成后使用ret指令返回,把pc移动到主调函数
数据:
函数调用时,在堆栈区域要申请一片栈帧用于存放函数的局部变量和参数等
函数返回时,释放栈帧
栈帧的分配和释放遵循后进先出(数据结构中栈的行为方式)
二、递归的逻辑
现在有一个规模n的大问题,假设n-1规模的问题已经解决,先应思考如何用n-1规模的问题解决规模为n的问题。
两个要点:①将大问题用小问题解决 ②找到最小问题(递归出口)
三、递归例题
n的阶乘
【注意】:阶乘很大!返回值是long long!
#include <cstdio>
long long Fab(int n){
if (n==1){
return 1;
}else{
return Fab(n-1)*n;
}
}
int main(){
int n;
long long out;
scanf("%d",&n);
out = Fab(n);
printf("%lld",out);
}
汉诺塔
#include <cstdio>
int hanoi(int n){
if (n==1){
return 2;
}else{
return 3 * hanoi(n-1) + 2;
}
}
int main(){
long long n;
while(scanf("%d",&n) != EOF){
printf("%lld\n",hanoi(n));
}
}