题目:用函数实现角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求输入5经过多少次可得到自然数1
方法:递归函数
我遇到的问题:按下面这个代码运行,输入1,得到的是0次;输入其他数字,直接不打印。
如果我把 “printf("共进行了%d次", i);”放到主函数的“ m(n,i); return 0;”之间的话,不管输入什么都是0次。
好像根本就只调用了一次这个递归函数的样子。
能跟我解释一下为什么会这样吗?我又该如何改?谢谢各位了!!
#include <stdio.h>
int m(int ,int);
int main()
{
int n;
int i=0;
scanf_s("%d", &n);
m(n,i);
return 0;
}
int m(int n,int i)
{
if (n == 1)
printf("共进行了%d次", i);
return 1;
if (n % 2 == 0)
{
n = n / 2;
i = i + 1;
m(n,i);
}
else
{
n = n * 3 + 1;
i = i + 1;
m(n,i);
}
}