算法小白又来啦~本博客仅用来学习过程中的记忆,写的不好,大佬们勿喷..
递归定义:递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程序中直接或间接调用自身的现象,这种程序调用自身的编程技巧称为递归(rercursion)
所以递归的思想是调用自身,那么一个程序段或函数功能的设计就显得尤为重要,因为毕竟内部还需要调用本身。
举个栗子:
角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
如:输入22
输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 1
代码实现如下:
#include<stdio.h>
void Jg(int *count,int n);
int main(){
int count=0;
Jg(&count,22);
printf("%d",count);
}
void Jg(int *count,int n){
if(n!=1){
if(n%2==0){
n=n/2;
}
else{
n=n*3+1;
}
(*count)++;
Jg(count,n);
}
}
这个算法中的Jg算法即接受传入count的地址和需要计算的初始值n以及中间生成的n;
在内部判断完中间n之后在内部继续调用;
所以~算法好难~好好学吧~skrskr