递归

来源:互联网 发布:淘宝买iphone4s 编辑:程序博客网 时间:2024/05/18 00:14
角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:输入22,输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 1 STEP=16 算法分析:递归出口是最后得到自然数为1,递归体是每次不为1都带入继续计算算法构造:f(n)={█(1       n=1@f(n/2)      n%2==0@f(3*n+1)         n%2!=0)┤由此看出,只要返回的结果不是1,那么就需要将返回的结果再带入公式中进行判断奇数偶数进行计算。算法实现:#include<stdio.h> int fun(int n);  int step = 0;int main(){int n = 0;printf("请输入一个整数:\n");scanf("%d",&n);fun(n);printf("\n");printf("共经过了%d次",step); }  int fun(int n) { if(n ==1) { step ++; printf("%5d",n); return 1; } else if(n%2==0) { step++; printf("%5d",n); return fun(n/2); } else { step++; printf("%5d",n); return fun(3*n+1); }  }