对给定的f(n) 当 n>=50025002 的时候,f(n)=n-5;当 n<50025002 的时候,f(n)=f(f(n+2005)) 给定n,求出发f(n)
如果使用递归,则会栈溢出!!!
可以递归化循环:
用m表示f的层数,f(m,n)表示参数n嵌套了m层f,例如
f(3,n)=f(f(f(n)))
f(1,n)=f(n)
f(0,n)=n
f(3,n)=f(f(f(n)))
f(1,n)=f(n)
f(0,n)=n
//当 n>=50025002 的时候,f(n)=n-5;当 n<50025002 的时候,f(n)=f(f(n+2005))
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n,m;
while(scanf("%d",&n)==1)
{
m=1;
while(m>0)
{
if(n>=50025002){ n=n-5;m--; }
else { n+=2005; m++; }
}
printf("%d\n",n);
}
return 0;
}