几次到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); }