#include <iostream>
#include <cstdio>
using namespace std;
/**
猴子吃桃问题:
猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又吃了一个。
第二天又将剩下的桃子吃掉一半,又多吃了一个。
以后每天都吃前一天剩下的一半零一个。
到第10天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?
*/
//我的:(10~1)
//递归
int fun(int d)
{
if (d == 10)
{
return 1;
}
return 2*(fun(d+1) + 1);
}
int main()
{
int d;
scanf("%d", &d);
printf("%d\n", fun(d)/2+1);
return 0;
}
//非递归
int main()
{
int a[15];
a[10] = 1;
for (int i=10; i>=1; i--)
{
a[i-1] = (a[i] + 1) * 2;
}
printf("%d\n", a[0]/2-1);
return 0;
}
//人家的:(1~10)
//递归
int fun(int n)
{
cout << "f(" << n << ")压栈" << endl;
if (n == 1)
{
cout << "此时函数达到最大深度" << endl; // [这里]函数栈最大深度为o(n);
cout << "f(" << n << ")弹栈" << endl;
return 1;
}
int a = fun(n-1)*2+2;
cout << "f(" << n << ")弹栈" << endl;
return a;
}
int main()
{
int n = 10;
cout << fun(n) << endl;
return 0;
}
//非递归
int main()
{
int a = 1;
for (i=1; i<=10; i--)
{
a = (a + 1) * 2;
}
printf("%d\n", a);
return 0;
}
/*
空间复杂度Space(N):Space(N) = Heap(N) + Stack(N);忽略低次项、系数之后,也记作o(N);
Heap(N)表示额外申请堆内存空间的大小,Stack(N)表示函数栈的最大深度;
当Stack(N)很大的时候慎用递归,当Stack(N)增长率很快(超过NlogN)的时候,慎用递归!
*/
2016/7/9重学了一波递归和递推
最新推荐文章于 2020-12-23 22:46:29 发布