#include<stdio.h>
int N;
int digui(int x)
{
if(x == 1)
{
return 1;
}
return 2*( digui(x -1) + 1);
}
int main(void)
{
int last = 1;
scanf("%d",&N);
printf("%d",digui(N));
return 0;
}
大致思路:
本题可以用递归和while循环写,并且,递归会在PTA上超时,
但是我认为递归的思路还是很好的,但是我遇到了一点弯儿。那就是digui(1)和digui(N)究竟谁代表第一天的桃子个数。这里呢,我取的是反向,也就是说,digui(N)代表第一天的桃子数。digui(1)代表的是第N天的桃子数,也就是递归的终点:桃子数为1.
我们知道,递归是要又终点和递归条件的,我们找到了终点,就应该写出递归的关系,怎么想的呢,就是把这个函数的返回值的值用下一项或者上一项表示(其实本质是参数的值更加接近于递归终点的那一项),把这个关系表达出来,就会一目了然。
下面是while算法:
#include<stdio.h>
int main()
{
int N, i, x;
scanf("%d", &N);
i=1;
x=1;
do{
x=2*(x+1);
i++;
}
while(i<N);
printf("%d", x);
return 0;
}