几次到1(分治递归)
输入一个正整数,处理它:如果是偶数就除以2,如果是奇数就加1或减1,一直处理下去,直到结果为1停止,最少需要操作几次?(要求用递归)
我的代码可能有bug,还望高手指点!如果谁有更好的解法也请赐教啊!
代码:
#include<stdio.h>
#include<stdlib.h>
int fun(int n);
int min(int a,int b);
int main()
{
int n;
while(scanf("%d",&n) != EOF )
printf("%d\n",fun(n));
//system("pause");
return 0;
}
int min(int a,int b)
{
return a<b? a:b;
}
int fun(int n)
{
if(n == 1) return 0;
if(n & 1)
return 2 + min( fun( (n+1)/2 ),fun( (n-1)/2 ));
else
return 1 + fun(n/2);
}

浙公网安备 33010602011771号